news 2026/4/17 13:24:53

LC.981 | 基于时间的键值存储 | 哈希 | upper_bound快速定位

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
LC.981 | 基于时间的键值存储 | 哈希 | upper_bound快速定位

输入:

  • set(key, value, timestamp)
  • get(key, timestamp)

要求:

  • 同一个key在不同timestamp可以存多次
  • get需要返回:timestamp_prev <= timestamp的最大那次对应的 value
  • 如果不存在返回空串""

输出:

  • set:无返回
  • getstring

思路:

这题的核心就是:对每个 key,把 (timestamp -> value) 存起来,并且能快速找“<= timestamp 的最大时间点”。

数据结构选择:

  • 外层:unordered_map<string, ...>通过 key 快速定位一组记录
  • 内层:map<int, string>自动按 timestamp 升序存放,支持二分相关操作

get(key, timestamp)怎么找?

  • upper_bound(timestamp):它返回第一个 > timestamp 的迭代器
  • 那么“<= timestamp 的最大值”就是它的前一个位置
  • 特判两种情况:
    1. 这个 key 压根不存在 ->""
    2. upper_bound指向 begin,说明所有 timestamp 都 > 目标 ->""
    3. 否则--it返回答案

复杂度:

  • 时间复杂度:
    • set:O(log M)
    • get:O(log M)
    • 其中 M 是某个 key 下存了多少条记录
  • 空间复杂度:O(总记录数)

classTimeMap{unordered_map<string,map<int,string>>m;public:TimeMap(){}voidset(string key,string value,inttimestamp){m[key][timestamp]=value;}stringget(string key,inttimestamp){if(m.find(key)==m.end())return"";map<int,string>&time_m=m[key];autoit=time_m.upper_bound(timestamp);// first > timestampif(it==time_m.begin())return"";// all > timestamp--it;// last <= timestampreturnit->second;}};
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 0:48:02

我在明末当CEO-第5集《运营管理的粥棚效率》

轻松时刻: 有感而发写一下首歌: 零点时差:播放地址 故事核心设定 主角&#xff1a;方逸&#xff0c;顶尖商学院MBA毕业生&#xff0c;穿越至崇祯十年&#xff08;1637年&#xff09;&#xff0c;成为河南一名家道中落的秀才。 核心矛盾&#xff1a;用现代管理工具拯救前工业时…

作者头像 李华
网站建设 2026/4/18 0:49:49

Prettier 代码格式化:统一代码外观

在前端开发中&#xff0c;代码的可读性和一致性至关重要。一个团队中不同开发者的编码风格可能千差万别&#xff0c;这会给代码的维护和协作带来很大的困难。Prettier 作为一款强大的代码格式化工具&#xff0c;能够帮助我们统一代码外观&#xff0c;提高代码的可读性和可维护性…

作者头像 李华