diff --git a/leetcode/array/ContainsDuplicatesII.java b/leetcode/array/ContainsDuplicatesII.java index 81240ea2..597acf58 100644 --- a/leetcode/array/ContainsDuplicatesII.java +++ b/leetcode/array/ContainsDuplicatesII.java @@ -1,6 +1,11 @@ //Given an array of integers and an integer k, find out whether there are two distinct indices i and //j in the array such that nums[i] = nums[j] and the absolute difference between i and j is at most k. +//Example + +// [2,5,-1,6,-9,5,8]. k=3, i=1, j= 5 |i-j|=4 4>3 --> false +// [2,3,-1,3,-9,5,8]. k=3, i=1, j= 3 |i-j|=2 2<3 --> true + class ContainsDuplicatesII { public boolean containsNearbyDuplicate(int[] nums, int k) { HashMap map = new HashMap(); diff --git a/leetcode/array/FindAllNumbersDisappearedInAnArray.java b/leetcode/array/FindAllNumbersDisappearedInAnArray.java index c9ca7780..e79ff356 100644 --- a/leetcode/array/FindAllNumbersDisappearedInAnArray.java +++ b/leetcode/array/FindAllNumbersDisappearedInAnArray.java @@ -14,24 +14,19 @@ class FindAllNumbersDisappearedInAnArray { public List findDisappearedNumbers(int[] nums) { - List result = new ArrayList(); - HashMap map = new HashMap(); - for(int i = 1; i <= nums.length; i++) { - map.put(i, 1); - } - - for(int i = 0; i < nums.length; i++) { - if(map.containsKey(nums[i])) { - map.put(nums[i], -1); - } - } - - for(int i: map.keySet()) { - if(map.get(i) != -1) { - result.add(i); + List result = new ArrayList<>(); + for (int i = 0; i < ary.length; i++) { + if (ary[i] < i + 1) { + result.add(i + 1); + } else if (ary[i] > i + 1 && ary[ary[i] - 1]!=ary[i]) { + int temp = ary[ary[i] - 1]; + ary[ary[i] - 1] = ary[i]; + ary[i] = temp; + i--; + } else if (ary[i]!=i+1) { + result.add(i + 1); } } - return result; } }