1. 程式人生 > >Leetcode219 存在重複元素II

Leetcode219 存在重複元素II

題目 給定一個整數陣列和一個整數 k,判斷陣列中是否存在兩個不同的索引 i 和 j,使得 nums [i] = nums [j],並且 i 和 j 的差的絕對值最大為 k。 方法: 對於這個題目,感覺自己蠢到爆了,因為要找數字 A 的 k 範圍內相等的數字,所以剛開始一直想的事A左邊k個,右邊k個,在兩個k範圍內找。 然而可以對於每個nums[i] 都去看左邊的k範圍內是否存在相等的數即可。所有左右找的題,都可以化為找左邊。然後從頭開始遍歷。

public boolean containsNearbyDuplicate(int[] nums, int k) {
        HashMap<Integer, Integer> hashMap = new HashMap<>();
        for (int i = 0; i < nums.length; i++) {
            if (hashMap.containsKey(nums[i])) {
                int location = hashMap.get(nums[i]);
                if (i - location <= k) {
                    return true;
                }
            }
            hashMap.put(nums[i], i);
        }
        return false;
    }