数组中重复的数据
题目特殊要求
必须设计并实现一个时间复杂度为 O(n) 且仅使用常量额外空间的算法解决此问题。
题解
错误解法
class Solution {
public:
vector<int> findDuplicates(vector<int>& nums) {
int n=nums.size();
int cnt[100000]={0};
vector<int> ans;
for(int i=0;i<n;i++){
if(cnt[nums[i]]!=0){
ans.push_back(nums[i]);
}
cnt[nums[i]]++;
}
return ans;
}
};
符合要求解法
class Solution {
public:
vector<int> findDuplicates(vector<int>& nums) {
int n = nums.size();
for (int i = 0; i < n; ++i) {
while (nums[i] != nums[nums[i] - 1]) {
swap(nums[i], nums[nums[i] - 1]);
}
}
vector<int> ans;
for (int i = 0; i < n; ++i) {
if (nums[i] - 1 != i) {
ans.push_back(nums[i]);
}
}
return ans;
}
};