zl程序教程

您现在的位置是:首页 >  其它

当前栏目

442. Find All Duplicates in an Array

in Array an Find all Duplicates
2023-09-11 14:22:44 时间

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]

 

Approach #1: Math. [Java]

class Solution {
    public List<Integer> findDuplicates(int[] nums) {
        List<Integer> ans = new ArrayList<>();
        
        for (int i = 0; i < nums.length; ++i) {
            int index = Math.abs(nums[i]) - 1;
            if (nums[index] < 0) 
                ans.add(Math.abs(index+1));
            nums[index] = -nums[index];
        }
        
        return ans;
    }
}

  

Analysis:

When find a number i flip the number to negtive at position i-1,

If the number at position i-1 is already negative, i is the occurs twice.

 

Reference:

https://leetcode.com/problems/find-all-duplicates-in-an-array/discuss/92387/Java-Simple-Solution