日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

找出数组中任一重复的数字

發布時間:2025/4/5 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 找出数组中任一重复的数字 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

找出數組中任一重復的數字

找出數組中任一重復的數字

??在一個長度為 n 的數組 nums 里的所有數字都在 0~n-1 的范圍內。數組中某些數字是重復的,但不知道有幾個數字重復了,也不知道每個數字重復了幾次。請找出數組中任意一個重復的數字。

示例 1:
輸入:[2, 3, 1, 0, 2, 5, 3]
輸出:2 或 3



低效解法

方法一

# python class Solution:def findRepeatNumber(self, nums):# 時間復雜度太高,O(N2)nums_set = set(nums)for i in nums_set:for j in nums:if i == j:nums.remove(j)break# nums包含所有重復元素return nums[0]

時間復雜度:O(N2)O(N^2)O(N2)
空間復雜度:O(N)O(N)O(N)

一般解法

方法二

// java public int findRepeatNumber(int[] nums) {Arrays.sort(nums);int n = nums.length;int result = 0;for (int i = 0; i < n - 1; i++) {if (nums[i] == nums[i + 1]) {result = nums[i];break;}}return result; } # pythonnums.sort()for i in range(len(nums)-1):if nums[i] == nums[i+1]:return nums[i]

python list sort() 基于排序算法Timsort,時間復雜度為:O(nlogn)O(n log n)O(nlogn),空間復雜度為:O(n)O(n)O(n)
python sort函數內部實現原理

時間復雜度:O(nlogn)O(n log n)O(nlogn)
空間復雜度:O(n)O(n)O(n)

方法三

基于HashSet,依次遍歷數組元素,插入集合中,如果無法插入,則為重復元素。

HashSet集合:不允許存儲重復的元素,查詢速度快

算法步驟

  • 初始化一個哈希表 (HashSet)
  • 遍歷數組中每一個元素,分別對每一個元素做如下的處理:
  • 將元素插入哈希表
  • 如果不可插入,則該元素為重復元素,返回該元素
  • 如果可插入,則判斷下一個元素
  • // 效率較低public int findRepeatNumber(int[] nums) {Set<Integer> set = new HashSet<Integer>();int repeat = 0;for (int i: nums) {if (!set.add(i)){repeat = i;break;}}return repeat;}

    時間復雜度:O(N)O(N)O(N)
    空間復雜度:O(N)O(N)O(N)



    算法步驟:

  • 初始化一個哈希表 (HashSet)
  • 遍歷數組中每一個元素,分別對每一個元素做如下的處理:
  • 先判斷哈希表中是否存在這個元素
  • 如果存在的話,則說明這個元素重復,則直接返回
  • 否則,將這個元素加入到哈希表中,方便后續的判重
  • public int findRepeatNumber(int[] nums) {HashSet<Integer> set = new HashSet<Integer>();for (int i: nums) {// 判斷元素是否存在if (set.contains(i)) {return i;}set.add(i);}return -1;} }

    set.contains()、set.add()時間復雜度為O(N)
    Java:Set 的 contains() 方法 時間復雜度

    時間復雜度是:O(n)
    空間復雜度是:O(n)


    方法四:原地置換算法–目前的最優解

    原地置換算法詳解及其應用

    使用條件

  • 元素個數為n,元素值范圍為:[0,n-1]
  • 用于重復出現的數,缺失的數等題目
  • 理解

    每個元素都有自己的位置(該元素的下標,如元素0的位置應該是下標為0),如果一組數(元素個數為n,元素值范圍為:[0,n-1])中缺失或重復,則表現為有空位或位置重復匹配

    原地置換算法-視頻-作者:chefyuan

    思路

    • 判斷數組是否為空
    • 為空
    • 非空
      • 依次判斷該下標對應的元素是否為指定元素
        • 不在
          • 判斷該元素真正的位置在哪兒?
            • 相等(該元素和其真正位置上的元素相等)
              • 找到重復元素
            • 不等
              • 交換該元素和其正確位置上的元素
    // javapublic int findRepeatNumber4(int[] nums) {// 判斷數組為空是否需要?if (nums.length == 0){return -1;}for (int i = 0; i < nums.length; i++) {while (nums[i] != i){if (nums[i] == nums[nums[i]]){return nums[i];}int temp = nums[i];nums[i] = nums[temp];nums[temp] = nums[i];}}return -1;}

    TODO:分析
    時間復雜度:
    空間復雜度:

    # python轉寫if len(nums) == 0:return -1for i in range(len(nums)):while nums[i] != i:if nums[i] == nums[nums[i]]:return nums[i]temp = nums[i]nums[i] =nums[temp]nums[temp] = tempreturn -1 《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

    總結

    以上是生活随笔為你收集整理的找出数组中任一重复的数字的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。