剑指offor 做题汇总

1:剑指 Offer 03. 数组中重复的数字 有的思路会是自己想的有的是参考别人的思路

 

 

 

#include<set>
class Solution {
public:
    int findRepeatNumber(vector<int>& nums) {
        // 两个方案,一个是用set 时间复杂度 O(n) 空间复杂度O(n)
        set<int> se;
        pair <set<int >:: iterator ,bool> retpair;
        for(int num : nums){
            retpair = se.insert(num);
            if(retpair.second == false){
                return num;
            }
        }
        return 0;
    }
};

  

#include<set>
class Solution {
public:
    int findRepeatNumber(vector<int>& nums) {
        //原地交换位置 如果下标为nums[i]!=i 那么就让 下标为i的与下标为nums[i]的交换位置知道 下标为i的位置上存储的是i 
        // 如果发现下标为i的位置上存储的数值小于i那么就是重复数字 或者存储过程中发现需要交换的两个数是同一样的数字
        //时间复杂度O(N) 空间复杂度O(1)
        int tmp;
        for(int  i= 0;i<nums.size();i++){ 
            while(nums[i] != i){
                if(nums[i] == nums[nums[i]]){
                    return nums[i];
                }
                tmp = nums[nums[i]];
                nums[nums[i]] = nums[i];
                nums[i] = tmp;
            }
        }
        return -1;

    }
};

  

posted @ 2021-02-14 21:50  rollupbytian  阅读(111)  评论(0)    收藏  举报