文章目录
题目
代码(首刷部分看解析)
注意在while下面要有if判断break,while的判断条件是判断在i
位置上是否就位,而if
则是判断若交换的两个位置是一样的,则break,否则会陷入死循环。
class Solution {
public:
vector<int> findDisappearedNumbers(vector<int>& nums) {
int n = nums.size();
for(int i = 0; i < n; i++) {
while(nums[i] != i + 1) {
if(nums[i] == nums[nums[i] - 1])
break;
swap(nums[i], nums[nums[i] - 1]);
}
}
vector<int> res;
for(int i = 0; i < n; i++) {
if(nums[i] != i+1)
res.push_back(i+1);
}
return res;
}
};