您的位置:首页 > 其它

【442】Find All Duplicates in an Array

2017-05-27 21:50 381 查看
题目:

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]

思路:

将数组内的数字依次交换放入对应的下标,1-n对应nums[0 - (n-1)] 如4放在nums[3], 进行n次交换后,再从头开始遍历,若nums[ i ] != i + 1则为出现两次的元素。

代码:

class Solution {
public:
vector<int> findDuplicates(vector<int>& nums) {
vector<int> op;
int i=0;
while(i<nums.size()) {
if (nums[i]!=nums[nums[i]-1])
swap(nums[i],nums[nums[i]-1]);
else
i++;
}
for(int i=0;i<nums.size();i++) {
if(nums[i]!=i+1)
op.push_back(nums[i]);
}
return op;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: