劍指 Offer 03 陣列中重複的數字

2022-09-09 14:30:23 字數 1377 閱讀 8040

標籤:陣列、雜湊表

題目

找出陣列中重複的數字。

在乙個長度為 n 的陣列 nums 裡的所有數字都在 0~n-1 的範圍內。陣列中某些數字是重複的,但不知道有幾個數字重複了,也不知道每個數字重複了幾次。請找出陣列中任意乙個重複的數字。

輸入:[2

,3,1

,0,2

,5,3

]輸出:2 或 3

2<= n <=

100000

分析

解法1:既然題目說標籤是雜湊表,那麼直接用hash表去做肯定是可以的。只需要迴圈然後把元素作為鍵存入雜湊表,每次在存之前判斷一下該元素在雜湊表中是否存在,如果存在就說明該元素重複,直接返回即可。

解法2:注意題目有乙個不容易發現的條件,那就是所有數字都在 0~n-1 的範圍內,這就提供了另一種解法,那就是定義乙個陣列,陣列的index是nums[i],這樣對於相同的數,index是一樣的,就能判斷出是否有重複數字。如果這裡沒有[所有數字都在 0~n-1 的範圍內]這個條件也是可以做的,只不過陣列的空間就得開到[-2 ^ 31, 2 ^ 31 - 1]也就是int的範圍。

解法3:先對陣列排序,再迴圈判斷是否有重複值即可。

編碼

解法1

class

solution

map.

put(nums[i],1

);}return-1;}}

時間複雜度o(n),空間複雜度o(n)

解法2

class

solution

}return res;

}}

時間複雜度o(n),空間複雜度o(n)

解法3

class

solution

}return res;

}}

時間複雜度o(nlogn),空間複雜度o(1)

劍指offer03 陣列中重複的數字

在乙個長度為 n 的陣列 nums 裡的所有數字都在 0 n 1 的範圍內。陣列中某些數字是重複的,但不知道有幾個數字重複了,也不知道每個數字重複了幾次。請找出陣列中任意乙個重複的數字。示例 1 輸入 2,3,1,0,2,5,3 輸出 2 或 3限制 2 n 100000 首先拿到這道題最先想到的是...

劍指Offer03 陣列中重複的數字

劍指offer典型題整理 爭取做最好的題解 題目描述 在乙個長度為 n 的陣列 nums 裡的所有數字都在 0 n 1 的範圍內。陣列中某些數字是重複的,但不知道有幾個數字重複了,也不知道每個數字重複了幾次。請找出陣列中任意乙個重複的數字。示例 輸入 2,3,1,0,2,5,3 輸出 2 或 3 限...

劍指offer 03陣列中重複的數字

找出陣列中重複的數字。在乙個長度為 n 的陣列 nums 裡的所有數字都在 0 n 1 的範圍內。陣列中某些數字是重複的,但不知道有幾個數字重複了,也不知道每個數字重複了幾次。請找出陣列中任意乙個重複的數字。示例 1 輸入 2,3,1,0,2,5,3 輸出 2 或 3 限制 2 n 100000 首...