Given an array of integers, 1 ≤ a[i] ≤ n (n = size of array), some elements appear twice and others appear once.
Find all the elements that appear twice in this array.
Could you do it without extra space and in O(n) runtime?
Example:
Input:
[4,3,2,7,8,2,3,1]
Output:
[2,3]
class Solution {
public:
vector<int> findDuplicates(vector<int>& nums) {
vector<int> result;
for (int i = 0; i < nums.size(); i++) {
while (nums[i] != -1 && i != nums[i] - 1) {
if (nums[i] == nums[nums[i] - 1]) {
result.push_back(nums[i]);
nums[i] = -1;
break;
}
swap(nums[i], nums[nums[i] - 1]);
}
}
return result;
}
};

本文介绍了一种在不使用额外空间的情况下找出数组中所有出现两次的元素的方法,并提供了一个C++实现的示例。该方法能够在O(n)的时间复杂度内完成运算。
355

被折叠的 条评论
为什么被折叠?



