You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LeetCode时间键值存储问题:元组集合中忽略值的存在性检查

LeetCode「Time Based Key Value Store」问题解答

为什么_无法生效?

在Python里,_并不是通配符:

  • 它仅在解构赋值场景下用作占位符(比如a, _ = (1, 2),表示忽略第二个值)。
  • 当你写出(timestamp, _)时,Python会将其视为一个包含timestamp和变量_当前值的普通元组,集合的成员检查需要完全匹配元组的所有元素,因此这种写法要么因_未定义报错,要么只能匹配恰好第二个元素等于_值的元组,完全达不到“忽略value”的匹配效果。

最简单的解决方法

你的核心问题是用集合存储元组的方式不适合这种“按timestamp模糊匹配”的场景,最简单的改造是把存储结构换成字典嵌套字典:每个key对应一个以timestamp为键、value为值的子字典,这样可以直接通过timestamp快速查找。

修改后的完整代码:

class TimeMap:

    def __init__(self):
        self.map = {}

    def set(self, key: str, value: str, timestamp: int) -> None:
        if key not in self.map:
            self.map[key] = {}
        # 题目保证同key同timestamp不会重复set,直接覆盖或赋值即可
        self.map[key][timestamp] = value

    def get(self, key: str, timestamp: int) -> str:
        if key not in self.map:
            return ""
        # 从目标timestamp向下遍历,找到第一个存在的timestamp
        while timestamp >= 0:
            if timestamp in self.map[key]:
                return self.map[key][timestamp]
            timestamp -= 1
        return ""

如果想要更高效的查找(避免最坏情况下O(n)的遍历),可以额外维护每个key对应的排序timestamp列表,用二分查找快速定位最大的≤目标timestamp的值,时间复杂度能降到O(logn):

class TimeMap:

    def __init__(self):
        self.map = {}  # key: {timestamp: value}
        self.timestamps = {}  # key: 递增排序的timestamp列表

    def set(self, key: str, value: str, timestamp: int) -> None:
        if key not in self.map:
            self.map[key] = {}
            self.timestamps[key] = []
        self.map[key][timestamp] = value
        self.timestamps[key].append(timestamp)  # 题目保证set的timestamp递增,直接追加即可

    def get(self, key: str, timestamp: int) -> str:
        if key not in self.map:
            return ""
        ts_list = self.timestamps[key]
        left, right = 0, len(ts_list) - 1
        target_ts = -1
        # 二分查找最大的<=目标timestamp的元素
        while left <= right:
            mid = (left + right) // 2
            if ts_list[mid] <= timestamp:
                target_ts = ts_list[mid]
                left = mid + 1
            else:
                right = mid - 1
        return self.map[key][target_ts] if target_ts != -1 else ""

内容的提问来源于stack exchange,提问作者KaiDubauskas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 06:25:23