package com.fishercoder.solutions;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

/**
 * 219. Contains Duplicate II
 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 1:
 Input: nums = [1,2,3,1], k = 3
 Output: true

 Example 2:
 Input: nums = [1,0,1,1], k = 1
 Output: true

 Example 3:
 Input: nums = [1,2,3,1,2,3], k = 2
 Output: false
 */
public class _219 {

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

    public static class Solution2 {
        public boolean containsNearbyDuplicate(int[] nums, int k) {
            Set<Integer> set = new HashSet<>();
            for (int i = 0; i < nums.length; i++) {
                if (!set.add(nums[i])) {
                    return true;
                }
                if (set.size() > k) {
                    set.remove(nums[i - k]);
                }
            }
            return false;
        }
    }
}

@@ -130,431 +130,8 @@
 t;%0A%0A
-/**%0A * 219. Contains Duplicate II%0A Given an array of integers and an integer k,%0A find out whether there are two distinct indices i and j in the array%0A such that nums%5Bi%5D = nums%5Bj%5D and the absolute difference between i and j is at most k.%0A%0A Example 1:%0A Input: nums = %5B1,2,3,1%5D, k = 3%0A Output: true%0A%0A Example 2:%0A Input: nums = %5B1,0,1,1%5D, k = 1%0A Output: true%0A%0A Example 3:%0A Input: nums = %5B1,2,3,1,2,3%5D, k = 2%0A Output: false%0A */%0A
 publ

refactor 219