Skip to content

442. Find All Duplicates in an Array

难度: Middle

刷题内容

原题连接

  • https://leetcode-cn.com/problems/find-all-duplicates-in-an-array/

内容描述

``` 给定一个整数数组 a,其中1 ≤ a[i] ≤ n (n为数组长度), 其中有些元素出现两次而其他元素出现一次。

找到所有出现两次的元素。

你可以不用到任何额外空间并在O(n)时间复杂度内解决这个问题吗?

示例:

输入: [4,3,2,7,8,2,3,1]

输出: [2,3] ```

解题方案

思路 1

数值在1-n之间,可以对相应数值-1的下标位置取反,如果出现两次,就为正值,否则为负。
vector<int> findDuplicates(vector<int>& nums) {
    vector<int> ans;
    for(int i=0;i<nums.size();i++){
        int index = abs(nums[i])-1;
        if(nums[index]<0)
            ans.push_back(index+1);
        nums[index] = - nums[index];
    }
    return ans;
}

我们一直在努力

apachecn/AiLearning

【布客】中文翻译组