标记法:一次遍历,每个数所表示的位置都置为负,遇到已经是负的位置就push入结果数组中。
时间复杂$O(N)$,空间复杂度$O(1)$
class Solution {
public:
vector<int> findDuplicates(vector<int>& nums) {
vector<int> res;
if (nums.empty()) return res;
for (int i = 0; i < nums.size(); ++ i)
{
int num = abs(nums[i]); //取绝对值,以免该值已经是负的
if (nums[num - 1] < 0) res.push_back(num);
else nums[num - 1] *= -1;
}
return res;
}
};
vector[HTML_REMOVED] res;这个额外空间是O(1)???