Cover image for leetcode每日一题 P2349 设计数字容器系统

leetcode每日一题 P2349 设计数字容器系统

字数 267
阅读
访客

时间轴

时间轴

2025-09-17

init

STL容器map和set的理解

题目:

这题主要利用空间换时间的思想,根据提示的 index 和 number 的大小范围可以断定暴力解法肯定 TLE,而事实也的确如此。利用 set 的特性:std::set 内部是平衡二叉搜索树(通常是红黑树)。树中 最小元素总是在最左边 → set.begin() 指向最左叶子节点。因此 rbegin() 则返回 最大值。

123456789101112131415161718192021222324252627282930313233343536
#include <map>#include <set>class NumberContainers {public:  NumberContainers() {}  void change(int index, int number) {    if (map.count(index)) { // map中原本有该index      int last_number = map[index];      min_map[last_number].erase(index);    }    map[index] = number;    min_map[number].insert(index);  }  int find(int number) {    if (min_map.count(number) && !min_map[number].empty()) {      return *min_map[number].begin();    } else {      return -1;    }  }private:  std::map<int, int> map;  std::map<int, std::set<int>> min_map;};/** * Your NumberContainers object will be instantiated and called as such: *      NumberContainers* obj = new NumberContainers(); * obj->change(index,number); * int param_2 = obj->find(number); */
评论加载中…