【Python3】【力扣题】219. 存在重复元素 II

【力扣题】题目描述:

【Python3】【力扣题】219. 存在重复元素 II_第1张图片

【Python3】代码:

1、解题思路:哈希表。遍历每个元素,将元素及下标添加到字典,若当前元素已在字典中且下标之间距离\leqk,则存在重复元素。

知识点:{}:创建空字典。

              enumerate(序列):返回可遍历的元素的下标及元素,(下标,元素)为元组形式。

              字典[键]:通过键获取值,若没有该键,则添加键值对。

              键 in 字典:判断键是否在字典中。判断值是否在字典中则使用:值 in 字典.values()。

class Solution:
    def containsNearbyDuplicate(self, nums: List[int], k: int) -> bool:
        # 哈希表
        d = {}
        for i,x in enumerate(nums):
            if x in d and i - d[x] <= k:
                return True
            d[x] = i
        return False

2、解题思路:滑动窗口。遍历每个元素,用集合记录连续的k个元素(即下标为i-k到i)作为滑动窗口,判断滑动窗口中是否有重复元素。

知识点:set():创建空集合。

              集合.remove(...):从集合中移除元素。

              集合.add(...):往集合中添加元素。

注解:i<=k时,若存在重复元素,返回True,若没有重复的元素,将元素添加到集合中;i>k时,将下标为i-k-1的元素从集合中移除,使滑动窗口始终保持k位(即下标为i-k到i的k个元素),判断滑动窗口中是否有重复元素即可。

class Solution:
    def containsNearbyDuplicate(self, nums: List[int], k: int) -> bool:
        # 滑动窗口
        s = set()
        for i,x in enumerate(nums):
            if i > k:
                s.remove(nums[i-k-1])
            if x in s: 
                return True
            s.add(x)
        return False

你可能感兴趣的:(力扣题,leetcode,算法)