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 difference between i and j is at most k.

使用map记录元素出现的位置,再次出现时,比较一下这次的位置和上次的位置之差是否小于等于k。是就可以返回了,不是就将旧的记录换成新的。

var containsNearbyDuplicate = function(nums, k) {
    var num = nums.length;
    if (num===0)
        return false;
    var map = {};
    for (var i = 0; i < num; i++) {
        if (map[nums[i]]!==undefined&&(i-map[nums[i]])<=k) 
            return true;
        map[nums[i]] = i;
    }
    return false;
};

在有Set数据结构的语言中,使用Set会更快:
这里相当于使用set判断一个k范围内是否有重复的数,然后将这个范围从头移到尾。

public boolean containsNearbyDuplicate(int[] nums, int k) {
        Set<Integer> set = new HashSet<Integer>();
        for(int i = 0; i < nums.length; i++){
            if(i > k) set.remove(nums[i-k-1]);
            if(!set.add(nums[i])) return true;
        }
        return false;
 }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容