码迷,mamicode.com
首页 > 其他好文 > 详细

442. Find All Duplicates in an Array

时间:2020-05-14 11:11:27      阅读:60      评论:0      收藏:0      [点我收藏+]

标签:out   and   with   time   href   his   do it   出现   tps   

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 List<Integer> findDuplicates(int[] nums) {
        List<Integer> res = new ArrayList();
        Arrays.sort(nums);
        for(int i = 0; i < nums.length-1; ){
            if(nums[i] == nums[i+1]){
                res.add(nums[i]);
                i+=2;
            }
            else{          
                i++;
            }
        }
        return res;
    }
}

这算O(n)吗??好像不算

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

这种方法利用了1 ≤ a[i] ≤ n,即a[i]-1一定是nums的index

如果一个数出现两次,第一次出现的时候先把它变成负的,然后第二次出现只要他是负的就res.add()

https://www.cnblogs.com/reboot329/articles/6006346.html

442. Find All Duplicates in an Array

标签:out   and   with   time   href   his   do it   出现   tps   

原文地址:https://www.cnblogs.com/wentiliangkaihua/p/12886816.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!