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


class Solution {
    public boolean containsNearbyDuplicate(int[] nums, int k) {
        // use a hashmap , key is the value, value is list of index 
        // every time when we try to add an index to the list of index, 
        // check their index diff , if it's at most k 
        HashMap<Integer, List<Integer>> map = new HashMap<>();
        for(int i = 0; i < nums.length; i++){
            if(!map.containsKey(nums[i])){
                map.put(nums[i], new ArrayList<>());
            }
            List<Integer> list = map.get(nums[i]);
            if(list.size() >= 1){
                for(int index : list){
                    if(Math.abs(index - i) <= k) return true;
                }
            }
            list.add(i);
        }
        return false;
        
    }
}

 

posted on 2018-11-08 02:15  猪猪&#128055;  阅读(72)  评论(0)    收藏  举报

导航