Java教程

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

这篇关于981. 基于时间的键值存储的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!