标签: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()
442. Find All Duplicates in an Array
标签:out and with time href his do it 出现 tps
原文地址:https://www.cnblogs.com/wentiliangkaihua/p/12886816.html