劍指offer-數組中重複的數字(leetcode)

題目描述:

找出數組中重複的數字。
在一個長度爲 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;
    }
};

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章