列表

详情


219. 存在重复元素 II

给你一个整数数组 nums 和一个整数 k ,判断数组中是否存在两个 不同的索引 i 和 j ,满足 nums[i] == nums[j]abs(i - j) <= k 。如果存在,返回 true ;否则,返回 false

 

示例 1:

输入:nums = [1,2,3,1], k = 3
输出:true

示例 2:

输入:nums = [1,0,1,1], k = 1
输出:true

示例 3:

输入:nums = [1,2,3,1,2,3], k = 2
输出:false

 

 

提示:

相似题目

存在重复元素

存在重复元素 III

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
class Solution { public: bool containsNearbyDuplicate(vector<int>& nums, int k) { } };

golang 解法, 执行用时: 124 ms, 内存消耗: 8.5 MB, 提交时间: 2023-09-27 15:18:00

func containsNearbyDuplicate(nums []int, k int) bool {
    n := len(nums)
    set := map[int]bool{}
    for i := 0; i < n; i++ {
        if i > k {
            set[nums[i - k - 1]] = false
        }
        if set[nums[i]] {
            return true
        }
        set[nums[i]] = true
    }
    return false
}

python3 解法, 执行用时: 84 ms, 内存消耗: 25.1 MB, 提交时间: 2023-09-27 15:17:39

class Solution:
    def containsNearbyDuplicate(self, nums: List[int], k: int) -> bool:
        n = len(nums)
        s = set()
        for i in range(n):
            if i > k:
                s.remove(nums[i - k - 1])
            if nums[i] in s:
                return True
            s.add(nums[i])
        return False

php 解法, 执行用时: 168 ms, 内存消耗: 29.9 MB, 提交时间: 2023-09-27 15:16:00

class Solution {

    /**
     * @param Integer[] $nums
     * @param Integer $k
     * @return Boolean
     */
    function containsNearbyDuplicate($nums, $k) {
        $map = [];
        foreach($nums as $kk=>$vv){
            if(isset($map[$vv]) && abs($kk-$map[$vv]) <= $k){
                return true;
            }
            $map[$vv] = $kk;
        }
        return false;
    }
}

javascript 解法, 执行用时: 92 ms, 内存消耗: 54.3 MB, 提交时间: 2023-09-27 15:15:17

/**
 * @param {number[]} nums
 * @param {number} k
 * @return {boolean}
 */
var containsNearbyDuplicate = function(nums, k) {
    const set = new Set();
    for(let i = 0; i < nums.length; i++) {
        if(set.has(nums[i])) {
            return true;
        }
        set.add(nums[i]);
        if(set.size > k) {
            set.delete(nums[i - k]);
        }
    }
    return false;
};

java 解法, 执行用时: 22 ms, 内存消耗: 52.9 MB, 提交时间: 2023-09-27 15:15:00

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

golang 解法, 执行用时: 988 ms, 内存消耗: 7.8 MB, 提交时间: 2021-06-25 15:24:27

func containsNearbyDuplicate(nums []int, k int) bool {
    n := len(nums)
    for i, num := range nums {
        for j := i+1; j <= i+k && j < n; j++ {
            if num == nums[j] {
                return true
            }
        }
    }
    return false
}

上一题