LeetCode: 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]
自己的代码,时间是15ms,第一次提交超时:
public class Solution {
public List<Integer> findDuplicates(int[] nums) {
int length = nums.length;
int[] arrays = new int[length+1];
List<Integer> result = new ArrayList<Integer>();
for (int i = 0; i < length; i++) {
arrays[nums[i]]++;
if(arrays[nums[i]] == 2) {
result.add(nums[i]);
}
}
return result;
}
}
最快的答案,11ms:
public class Solution {
public List<Integer> findDuplicates(int[] nums) {
List<Integer> duplicates = new ArrayList<>();
if (nums == null || nums.length == 0) {
return duplicates;
}
int[] count = new int[nums.length];
for (int i = 0; i < nums.length; i++) {
count[nums[i] - 1]++;
}
for (int i = 0; i < nums.length; i++) {
if (count[i] == 2) {
duplicates.add(i + 1);
}
}
return duplicates;
}
}