剑指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;
}
};

浙公网安备 33010602011771号