Leetcode 981. Time Based Key-Value Store(二分查找)
Posted 李建明180
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode 981. Time Based Key-Value Store(二分查找)相关的知识,希望对你有一定的参考价值。
题目来源:https://leetcode.com/problems/time-based-key-value-store/description/
标记难度:Medium
提交次数:1/1
代码效率:33.33%(212ms)
题意
给定一系列set和get操作,其中:
- 每个set操作包含一个key,一个value和一个timestamp,其中timestamp是严格递增的
- 每个get操作包含一个key和一个timestamp,要求找出与这个key相等且时间戳<=timestamp的set操作中时间戳最大的set对应的value
所有操作总数不超过12万次。
分析
这个题目咋一看很唬人,其实完全不是那么回事。解题思路很简单:
- 用一个map维护set操作的key对应的value和timestamp对的列表
- 对于每个get操作,从key对应的列表中通过二分查找,找到最大的符合要求的timestamp对应的value
如果map用的是Hash Table,记总操作次数为N
,那么set的复杂度是O(1)
,get的复杂度是O(log(N))
;如果用的是树结构的话,那set的复杂度就是O(log(N))
,get的复杂度是O(log^2(N))
(不过显然可以把它写得更好一些)。
这次我写了二分查找。一般来说,如果二分查找(m = (l + r) / 2
)之后的转移条件是l = m + 1
,r = m
的话,那循环条件就可以写成l < r
;但是如果转移条件是l = m
,r = m - 1
的话,循环条件就需要写成l < r-1
,然后判断l
还是r
是解……
代码
1 | 大专栏 Leetcode 981. Time Based Key-Value Store(二分查找)"class">class { |
以上是关于Leetcode 981. Time Based Key-Value Store(二分查找)的主要内容,如果未能解决你的问题,请参考以下文章
LC 981. Time Based Key-Value Store
LeetCode 981 基于时间的键值存储[Map] HERODING的LeetCode之路
LeetCode 981. 基于时间的键值存储 / 274. H 指数 / 275. H 指数 II
[MSTL] lc981. 基于时间的键值存储(设计+哈希表+map二分查找+代码技巧)