寻找数组中出现了两次的数然后对它进行保存以及输出
我一开始想到的就是用哈希表去存储然后当数量到达两个的时候进行输出
class Solution {
public:
vector<int> findDuplicates(vector<int>& nums) {
map<int,int> a;
vector<int> n;
for(auto num:nums){
a[num]++;
if(a[num]==2) n.push_back(num);
}
return n;
}
};
后面发现运行的时间为
反正就挺无语哈哈哈哈
看了一下官方的做法大致是不断去替换原来的位置然后判断是否在位置上有对应的数字
class Solution {
public:
vector<int> findDuplicates(vector<int>& nums) {
for(int i=0;i<nums.size();i++){
while(nums[i] != nums[nums[i]-1]){
swap(nums[i],nums[nums[i]-1]);
}
}
vector<int> n;
for(int i=0;i<nums.size();i++){
if(nums[i]-1 != i){
n.push_back(nums[i]);
}
}
return n;
}
};
最后的结果是这样
主要的原因还是在于哈希表的遍历加上找数的时间复杂度是O(nlogn)然后官方的求解方法的时间复杂度为O(n)