劍指offer 陣列中重複的數字

2022-07-12 09:51:10 字數 815 閱讀 6882

在乙個長度為n的陣列裡的所有數字都在0到n-1的範圍內。 陣列中某些數字是重複的,但不知道有幾個數字是重複的。也不知道每個數字重複幾次。請找出陣列中任意乙個重複的數字。 例如,如果輸入長度為7的陣列,那麼對應的輸出是第乙個重複的數字2。

示例1思路:

1、從已經排序好的陣列中找重複的數字很簡單,所以最直接的想法就是先排序。時間複雜度為o(nlogn),空間複雜度為o(1)

2、利用雜湊表。從頭到尾掃瞄每乙個數字,每掃瞄乙個數字,都可以用o(1)的時間複雜度在雜湊表中檢視出是否已經包含這個數字。所以時間複雜度為o(n), 空間複雜度為o(n)

3、重排這個陣列。從頭到尾掃瞄這個陣列,當掃瞄到下標為 i 的數字時,首先比較這個數字(記為 m )是否與 i 相同,如果是,則接著掃瞄下乙個數字,否則拿它跟第 m 個數字比較。如果它和第 m 個數字相等,則找到重複的數字,否則將第 i 個數字和第 m 個數字交換。接下來重複這個比較、交換的過程,直到發現第乙個重複的數字。時間複雜度o(n). 不足之處:改變了陣列元素位置。

1

class

solution

13for (int i = 0; i < length; ++i) 17}

18for (int i = 0; i < length; ++i)

24int tmp =numbers[i];

25 numbers[i] =numbers[tmp];

26 numbers[tmp] =tmp;27}

28}29return

false;30

}31 };

劍指offer 陣列中重複的數字

題目描述 在乙個長度為n的陣列裡的所有數字都在0到n 1的範圍內。陣列中某些數字是重複的,但不知道有幾個數字是重複的。也不知道每個數字重複幾次。請找出陣列中任意乙個重複的數字。例如,如果輸入長度為7的陣列,那麼對應的輸出是重複的數字2或者3。class solution 考慮這種非法輸入 for i...

劍指offer 陣列中重複的數字

在乙個長度為n的陣列裡的所有數字都在0到n 1的範圍內。陣列中某些數字是重複的,但不知道有幾個數字是重複的。也不知道每個數字重複幾次。請找出陣列中任意乙個重複的數字。例如,如果輸入長度為7的陣列,那麼對應的輸出是重複的數字2或者3。分析 雖然也ac了,但是沒仔細看題,可以利用題目已有條件做到更簡單的...

劍指offer 陣列中重複的數字

題目描述 在乙個長度為n的陣列裡的所有數字都在0到n 1的範圍內。陣列中某些數字是重複的,但不知道有幾個數字是重複的。也不知道每個數字重複幾次。請找出陣列中任意乙個重複的數字。例如,如果輸入長度為7的陣列,那麼對應的輸出是重複的數字2或者3。解析 在乙個長度為n的陣列裡的所有數字都在0到n 1的範圍...