当前位置: 代码迷 >> 综合 >> Find All Duplicates in an Array
  详细解决方案

Find All Duplicates in an Array

热度:41   发布时间:2023-09-29 12:53:53.0

输入1个大小为n,数组内容在1~n之间的数组,要求在不使用额外空间的条件下输出重复的元素。

参考discuss,

 vector<int> findDuplicates(vector<int>& nums) {vector<int> res;int i = 0;while (i < nums.size()) {if (nums[i] != nums[nums[i]-1]) swap(nums[i], nums[nums[i]-1]);else i++;}for (i = 0; i < nums.size(); i++) {if (nums[i] != i + 1) res.push_back(nums[i]);}return res;}
通过每次迭代,都会使a[ a[i] ]=a[i](为了便于理解,下标从1开始),直到在交换前有a[ a[i] ]==a[i],转到下1个元素进行迭代。由于有的元素重复,

则会出现当i!=a[i]的时候但满足a[ a[i] ]==a[i]。所以在第2个循环输出。

  相关解决方案