力扣1146.快照数组

力扣1146.快照数组

  • 如果每一次快照都开一个新数组 会爆内存

  • 因为每次只会修改几个数 所以用哈希表 把每个数修改的信息存储下来

    • 搜的时候根据快照编号二分
cpp 复制代码
  class SnapshotArray {
      int cur_snap_id = 0;
       unordered_map<int,vector<pair<int,int>>> history;
  public:
      SnapshotArray(int length){}
      
      void set(int index, int val) {
          history[index].emplace_back(cur_snap_id,val);
      }
      
      int snap() {
          return cur_snap_id++;
      }
      
      int get(int index, int snap_id) {
          auto &p = history[index];
          //找>=snap_id+1的那组修改信息
          //如果不+1 当前snap_id存在 那么会找到snap_id
          //当前snap_id不存在 那么会找到>snap_id的那组
          //不统一了
          int j = ranges::lower_bound(p,make_pair(snap_id+1,0)) - p.begin() - 1;
          return j >= 0 ? p[j].second:0;
      }
  };
相关推荐
Purple Coder几秒前
面试-第二篇方法篇
面试·职场和发展
洛水水4 分钟前
【力扣100题】29. 对称二叉树
算法·leetcode·职场和发展
大熊背12 分钟前
近期遇到的一些问题总结(四)
算法·拍照·白平衡·isp pipeline
吴声子夜歌14 分钟前
Java——Arrays
java·算法·排序算法
Purple Coder19 分钟前
面试-第一篇心态篇
面试·职场和发展
Tutankaaa21 分钟前
从单场到多场并发:知识竞赛平台的弹性扩展能力
服务器·笔记·学习·职场和发展
洛水水25 分钟前
【力扣100题】26. 二叉树的中序遍历
算法·leetcode·深度优先
sheeta199827 分钟前
LeetCode 每日一题笔记 日期:2026.05.11 题目:2553. 分割数组中数字的数位
笔记·算法·leetcode
ZPC821039 分钟前
规划后的轨迹,如何发给 moveit_servo 执行
c++·人工智能·算法·3d
70asunflower41 分钟前
5.4 分布分析
人工智能·算法·机器学习·数据挖掘·数据分析