Skip to content

力扣链接: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 "";
};