日野弥生:勉強しよう

LeetCode 219 - 存在重复元素 II

发表于2025年04月01日

#数组 #哈希表 #滑动窗口

利用二叉搜索树的方式自然是能解决此题,但是会时间超限。因为本题对顺序没有要求,哈希表或者滑动窗口是更好的选择。

class TreeNode:
     def __init__(self, val=0, index=0, left=None, right=None):
         self.val = val
         self.index = index
         self.left = left
         self.right = right

class Solution:
    def containsNearbyDuplicate(self, nums: List[int], k: int) -> bool:
        self.tree = None
        result = False
        def createTree(root, val: int, index: int):
            nonlocal result
            if not root:
                root = TreeNode(val, index)
                return root
            if val < root.val:
                root.left = createTree(root.left, val, index)
            elif val > root.val:
                root.right = createTree(root.right, val, index)
            else:
                if not result:
                    result = True if abs(root.index - index) <= k else result
                root.index = index
            return root
        for idx, val in enumerate(nums):
            self.tree = createTree(self.tree, val, idx)
        return result

哈希表的方式

class Solution:
    def containsNearbyDuplicate(self, nums: List[int], k: int) -> bool:
        dic = {}
        for idx, num in enumerate(nums):
            if num in dic:
                if abs(dic[num] - idx) <= k:
                    return True
                else:
                    dic[num] = idx
            else:
                dic[num] = idx

        return False

フラッシュタブ:LeetCode

题目链接:https://leetcode.cn/problems/contains-duplicate-ii/

上一篇

LeetCode 217 - 存在重复元素

下一篇

LeetCode 136 - 只出现一次的数字