題目描述:
找出數組中重複的數字。
在一個長度爲 n 的數組 nums 裏的所有數字都在 0~n-1 的範圍內。數組中某些數字是重複的,但不知道有幾個數字重複了,也不知道每個數字重複了幾次。請找出數組中任意一個重複的數字。
簡單來說就是找到並返回數組中任意一個重複的數字。
一共有三種思路可以解決這個問題:
(1)把數組進行排序,遍歷數組進行查找。
(2)開闢一個額外的數組,進行比對。
(3)在原數組上進行原地交換,把數組中的元素交換到其對應下表上。由於每個數字最多交換2次就可以到達他的位置,因此時間複雜度仍是O(n);
前兩種解法就不上代碼了,第三種解法如下
class Solution {
public:
int findRepeatNumber(vector<int>& nums) {
for(int i = 0;i < nums.size(); ++i){
while(nums[i] != i){
if(nums[i] == nums[nums[i]]){
return nums[i];
}
swap(nums[i],nums[nums[i]]);
}
}
return -1;
}
};