T1:剑指offer53. 在排序数组中查找数字
解析:
class Solution {
public:
int search(vector<int>& nums, int target) {
int left = 0;
int right = nums.size() - 1;
int result = 0;
while (left <= right) {
int middle = left + (right - left) / 2;
if (nums[middle] >= target) {
right = middle - 1;
} else if (nums[middle] < target) {
left = middle + 1;
}
}
while (left < nums.size() && nums[left++] == target) {
result++;
}
return result;
}
};
T2:leetcode. 981 基于时间的键值存储
解析:
class TimeMap {
unordered_map<string, map<int,string>> hash;
public:
TimeMap() {
hash.clear();
}
void set(string key, string value, int timestamp) {
hash[key][timestamp] = value;
}
string get(string key, int timestamp) {
auto iter = hash[key].lower_bound(timestamp + 1);
if (iter == hash[key].begin()) {
return "";
}
--iter;
return iter->second;
}
};
/**
* Your TimeMap object will be instantiated and called as such:
* TimeMap* obj = new TimeMap();
* obj->set(key,value,timestamp);
* string param_2 = obj->get(key,timestamp);
*/
/*
class TimeMap {
unordered_map<string, vector<pair<int, string>>> m;
public:
TimeMap() {}
void set(string key, string value, int timestamp) {
m[key].emplace_back(timestamp, value);
}
string get(string key, int timestamp) {
auto &pairs = m[key];
// 使用一个大于所有 value 的字符串,以确保在 pairs 中含有 timestamp 的情况下也返回大于 timestamp 的位置
pair<int, string> p = {timestamp, string({127})};
auto i = upper_bound(pairs.begin(), pairs.end(), p);
if (i != pairs.begin()) {
return (i - 1)->second;
}
return "";
}
};
*/