219. Contains Duplicate II

一、题目

  1、审题

  

  2、分析

    判断数组中是否存在两个值相同的元素,下标之差 <= k

二、解答

  1、思路:

    使用 Set

    将数组的前 k 个元素添加入 Set,若有添加失败情况,则返回 true;

    之后每次将 set 中的前面第 i - k - 1 个元素从 Set 中去除,并添加入新的元素,若添加失败,则返回 true;

    最终,返回false;

    public boolean containsNearbyDuplicate(int[] nums, int k) {
        Set<Integer> set = new HashSet<>();
        for (int i = 0; i < nums.length; i++) {
            if(i > k)   // distance is k, in fact set could store K+1 nums
                set.remove(nums[i - k - 1]);
            if(!set.add(nums[i]))
                return true;
        }
        return false;
    }
原文地址:https://www.cnblogs.com/skillking/p/9902162.html