標籤:陣列、雜湊表
題目找出陣列中重複的數字。
在乙個長度為 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:
時間複雜度o(n),空間複雜度o(n)class
solution
map.
put(nums[i],1
);}return-1;}}
解法2:
時間複雜度o(n),空間複雜度o(n)class
solution
}return res;
}}
解法3:
時間複雜度o(nlogn),空間複雜度o(1)class
solution
}return res;
}}
劍指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 首...