力扣链接:981.基于时间的键值存储
难度:⭐⭐
解题关键词:二分查找
、map
解题思路:通过 key 找到 map 中的 value,然后利用二分查找找到对应目标
typescript
var TimeMap = function () {
this.map = new Map();
};
TimeMap.prototype.set = function (key, value, timestamp) {
if (this.map.has(key)) {
this.map.get(key).push([value, timestamp]);
} else {
this.map.set(key, [[value, timestamp]]);
}
};
TimeMap.prototype.get = function (key, timestamp) {
let pairs = this.map.get(key);
// 二分查找
if (pairs) {
let low = 0,
high = pairs.length - 1;
while (low <= high) {
let mid = Math.floor((high - low) / 2) + low;
if (pairs[mid][1] > timestamp) {
high = mid - 1;
} else if (pairs[mid][1] < timestamp) {
low = mid + 1;
} else {
return pairs[mid][0];
}
}
if (high >= 0) {
return pairs[high][0];
}
return "";
}
return "";
};