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記錄元素出現(xiàn)的位置,再次出現(xiàn)時,比較一下這次的位置和上次的位置之差是否小于等于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數(shù)據(jù)結(jié)構(gòu)的語言中,使用Set會更快:
這里相當(dāng)于使用set判斷一個k范圍內(nèi)是否有重復(fù)的數(shù),然后將這個范圍從頭移到尾。

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;
 }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容