存在重复元素 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

提示:

1 <= nums.length <= 105
-109 <= nums[i] <= 109
0 <= k <= 105

示例代码1: 【滑动窗口+哈希表】

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

思路解析:

 

示例代码2:【哈希】

class Solution:
    def containsNearbyDuplicate(self, nums: List[int], k: int) -> bool:
        #哈希表保存数字和相应的索引
        hash_ = {}
        for index, num in enumerate(nums):
            #如果数字已经存在于哈希表中了,就将现在的索引和之前的索引相减检查是否满足条件
            if num in hash_:
                if index - hash_[num] <= k:
                    return True
                #数字存在但是索引相减不满足条件,就更新这个数字的索引于最近的一项,保证再次遇到相同的数字能有最小的索引相减值
                hash_[num] = index
            #如果不存在这个数字,加入哈希表
            hash_[num] = index
        #如果循环结束了仍然没有满足条件的,则不存在这样的数字,返回False
        return False

Supongo que te gusta

Origin blog.csdn.net/weixin_44799217/article/details/131820581
Recomendado
Clasificación