这道题的思路是把数字对应的位置变成负数,既保留了数字大小,也做了标记。
当第二次遇到这个位置,发现是负数的时候,直接加入到结果数组中即可。
vector<int> findDuplicates(vector<int>& nums) {
vector<int> result;
int index;
for (int i = 0;i<nums.size();i++) {
index = abs(nums[i]) - 1;
if (nums[index] > 0) {
nums[index] = -nums[index];
} else {
result.push_back(index + 1);
}
}
return result;
}
另外,看我index定义的地方,如果定义到for循环内,就是打败80%和打败20%的差距。