981. 基于时间的键值存储

981. 基于时间的键值存储

 链接:981. 基于时间的键值存储

题解:

class TimeMap {
public:
    /** Initialize your data structure here. */
    TimeMap() {
        _table.clear();
    }
    
    void set(string key, string value, int timestamp) {
        _table[key].emplace_back(std::pair<int, string>(timestamp, value));
    }
    
    string get(string key, int timestamp) {
        auto ite = _table.find(key);
        if (ite == _table.end()) {
            return "";
        }
        auto& arr = ite->second;
        int left = 0;
        int right = arr.size()-1;
        while (left + 1 < right) {
            int mid = left + (right-left)/2;
            if (arr[mid].first == timestamp) {
                return arr[mid].second;
            } else if (arr[mid].first > timestamp) {
                right = mid;
            } else if (arr[mid].first < timestamp) {
                left = mid;
            }
        }
        if (arr[left].first == timestamp) {
            return arr[left].second; 
        } else if (arr[right].first == timestamp) {
            return arr[right].second;
        } else if (arr[right].first < timestamp) {
            return arr[right].second;
        } else if (arr[left].first < timestamp) {
            return arr[left].second;
        }
        return "";
    }
private:
    std::unordered_map<string, std::vector<std::pair<int, string>>> _table;
};

/**
 * 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 {
public:
    /** Initialize your data structure here. */
    TimeMap() {
        _table.clear();
    }
    
    void set(string key, string value, int timestamp) {
        _table[key].emplace_back(std::pair<int, string>(timestamp, value));
    }
    
    string get(string key, int timestamp) {
        auto ite = _table.find(key);
        if (ite == _table.end()) {
            return "";
        }
        std::pair<int, std::string> upper(timestamp, string({127}));
        auto entry = upper_bound(ite->second.begin(), ite->second.end(), upper);
        if (entry != ite->second.begin()) {
            return (entry-1)->second;
        }
        return "";
    }
private:
    std::unordered_map<string, std::vector<std::pair<int, string>>> _table;
};

/**
 * 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);
 */

上一篇:Leecode<每日一题>基于时间的键值存储


下一篇:OpenGL Compute Shader Image Processing计算着色器图像处理的实例