442. Find All Duplicates in an Array
Posted wentiliangkaihua
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了442. Find All Duplicates in an Array相关的知识,希望对你有一定的参考价值。
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()
以上是关于442. Find All Duplicates in an Array的主要内容,如果未能解决你的问题,请参考以下文章
442. Find All Duplicates in an Array
442. Find All Duplicates in an Array
442. Find All Duplicates in an Array
442. Find All Duplicates in an Array