题意:找到数组中出现两次的元素。
思路:此题和 Find All numbers disappeared in an Array 很像。元素与位置有一一对应的关系,因此更改元素所指向的位置的值可以指示该元素是否存在。先将其改成负数,当再次遇到该元素时,其指向的值已经变成负数。
class Solution {
public:
vector<int> findDuplicates(vector<int>& nums) {
vector<int> re;
for(int i = 0; i < nums.size(); ++ i) {
int m = nums[i] > 0 ? nums[i] : -nums[i];
if(nums[m - 1] < 0) {
re.push_back(m);
continue;
}
nums[m - 1] = -nums[m - 1];
}
return re;
}
};
遇到空间O(1),时间O(n)的要求,很可能是在原来的数据上改动。