题目描述
知识点
数组
结果
实现
码前思考
- 我的思路是排序。设置一个指针,从左到右遍历,让每个元素归位;
- 遍历完之后,如果出现不匹配的位置,那么代表缺失。
代码实现
class Solution {
public:
vector<int> findDisappearedNumbers(vector<int>& nums) {
int pos=0;//当前要移动的位置
int tmp;
int len=nums.size();
while(pos<len){
if(pos+1 != nums[pos]){
tmp = nums[nums[pos]-1];
if(tmp != nums[pos]){
nums[nums[pos]-1] = nums[pos];
nums[pos] = tmp;
}else{
pos++;
}
}else{
pos++;
}
}
vector<int> res;
for(int i=0;i<len;i++){
//printf("%d ",nums[i]);
if(nums[i]!=i+1){
res.push_back(i+1);
}
}
return res;
}
};
码后反思
- emmm,感觉还可以吧。时间复杂度为 O ( n ) O(n) O(n),然后空间也是 O ( 1 ) O(1) O(1),就是不知道为啥结果那么差。。。