文章目录

  • 1. 题目
  • 2. 解题

1. 题目

实现支持下列接口的「快照数组」- SnapshotArray:

  • SnapshotArray(int length) - 初始化一个与指定长度相等的 类数组 的数据结构。初始时,每个元素都等于 0。
  • void set(index, val) - 会将指定索引 index 处的元素设置为 val。
  • int snap() - 获取该数组的快照,并返回快照的编号 snap_id(快照号是调用 snap() 的总次数减去 1)。
  • int get(index, snap_id) - 根据指定的 snap_id 选择快照,并返回该快照指定索引 index 的值。
示例:
输入:["SnapshotArray","set","snap","set","get"][[3],[0,5],[],[0,6],[0,0]]
输出:[null,null,0,null,5]
解释:
SnapshotArray snapshotArr = new SnapshotArray(3);
// 初始化一个长度为 3 的快照数组
snapshotArr.set(0,5);
// 令 array[0] = 5
snapshotArr.snap();
// 获取快照,返回 snap_id = 0
snapshotArr.set(0,6);
snapshotArr.get(0,0);
// 获取 snap_id = 0 的快照中 array[0] 的值,返回 5提示:
1 <= length <= 50000
题目最多进行50000 次set,snap,和 get的调用 。
0 <= index < length
0 <= snap_id < 我们调用 snap() 的总次数
0 <= val <= 10^9

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/snapshot-array
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

class SnapshotArray {int time = 0;unordered_map<int,map<int,int>> m;//idx, time, val
public:SnapshotArray(int length) { }void set(int index, int val) {m[index][time] = val;}int snap() {return time++;}int get(int index, int snap_id) {if(!m.count(index))return 0;auto it = m[index].upper_bound(snap_id);//snap_id key 时间 有序 二分查找上限,上限之前的为答案if(it == m[index].begin())return 0;return (--it)->second;}
};

504 ms 79 MB


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!

LeetCode 1146. 快照数组(哈希map + 有序map)相关推荐

  1. C/C++描述 LeetCode 167. 两数之和 II - 输入有序数组

    C/C++描述 LeetCode 167. 两数之和 II - 输入有序数组   大家好,我叫亓官劼(qí guān jié ),在CSDN中记录学习的点滴历程,时光荏苒,未来可期,加油~博主目前仅在 ...

  2. 【代码随想录】【LeetCode】学习笔记04-哈希表

    前言 哈希法牺牲了空间换取了时间,因为我们要使用额外的数组,set或者是map来存放数据,才能实现快速的查找. 如果遇到需要判断一个元素是否出现过的场景,应该第一时间想到哈希法! 四个常见哈希表类型对 ...

  3. [Swift]LeetCode1146. 快照数组 | Snapshot Array

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:山青咏芝(shanqingyongzhi) ➤博客园地址:山青咏芝(https://www.cnblog ...

  4. 【牛客 - 331E】炫酷划线(权值线段树,树状数组哈希,随机数)

    题干: 链接:https://ac.nowcoder.com/acm/contest/331/E 来源:牛客网 平面上有一个圆,圆环上按顺时针顺序分布着从1到n,一共n个点. 现在无聊的小希开始按某种 ...

  5. Go语言中的Map和List实现有序Map

    Go语言中的Map和List实现有序Map Map定义: Go 中 Map是一种无序的键值对的集合.Map最重要的一点是通过key来快速检索数据,key类似于索引,指向数据的值.Map是一种集合,所以 ...

  6. HashMap - 基于哈希表和 Map 接口的键值对利器 (JDK 1.7)

    HashMap 的一些整理: (JDK 1.7) 基于哈希表的Map接口的非同步实现,定义了键映射到值的规则 此实现提供所有可选的映射操作,并允许使用null值和null键 此实现假定哈希函数将元素适 ...

  7. [Leetcode]数据结构之数组——python版本

    本篇文章根据labuladong的算法小抄汇总数组的常见算法,采用python3实现 文章目录 前缀和技巧 一维数组中的前缀和 区域和检索--数组不可变,T303 二维数组中的前缀和 二维区域和检索- ...

  8. js数组中forEach/some/every/map/filter/reduce的区别

    2019独角兽企业重金招聘Python工程师标准>>> // js数组中forEach/some/every/map/filter/reduce的区别// 1. foreach:就是 ...

  9. perl5 第九章 关联数组/哈希表

    第九章 关联数组/哈希表 by flamephoenix 一.数组变量的限制 二.定义 三.访问关联数组的元素 四.增加元素 五.创建关联数组 六.从数组变量复制到关联数组 七.元素的增删 八.列出数 ...

最新文章

  1. xHTML+div布局:三个div,两边div宽度固定,中间div宽度自适应
  2. Openldap部署LDAP服务器平台
  3. Excel中配置VBA的工作环境
  4. File类判断和获取功能
  5. js如何查看元素类型
  6. java 静态变量 new_java中静态对象和普通变量在初始化静态变量的时候有什么区别??高手!!...
  7. python不可实现的领域3d_岩土工程新手入门指南---FLAC3D学习指导与建议
  8. SAP License:SAP-Coding Block
  9. 软件设计师12-数据库(数据操作)
  10. Linux_shell 学习
  11. windows找不到文件gpedit.msc_u盘插入电脑在windows却找不到u盘的解决办法【详解】...
  12. Python3利用BeautifulSoup4抓取站点小说全文的代码
  13. 我的web2.0作品:畅想网络应用系统(采用JavaScript、Jquery、Ajax 等制作,完成时间10天)...
  14. 7.Jenkins 权威指南 --- 分布式构建
  15. 不变子空间与线性变换的矩阵之间的关系
  16. 主数据管理功能模块、实施、提供厂商
  17. iPhoneSE成为比拼的武器,天猫以更凶猛补贴反击拼多多
  18. 【工具使用篇】Visual Studio KeyMap
  19. pron网站制作遇到的问题
  20. 吴裕雄--天生自然 诗经:声声慢·寻寻觅觅

热门文章

  1. cf方框透视易语言代码怎么写_易语言真的那么不入流吗?
  2. JavaWeb笔记05-解决线程安全问题
  3. Android中创建自己的对话框
  4. 利用dft的定义计算dft的matlab程序_CP2K教程系列之静态计算(Pymatflow篇)
  5. 嵌入式常见笔试题总结
  6. Opencv 图像增强算法 图像检测结果及代码
  7. iOS关于armv7,armv7s,arm64,i386,x86_64等问题
  8. 5G通信的一些关键技术
  9. Codeforces - 1194C - From S To T - 子序列 - 排序
  10. 三大类sql语句——该记录是本人以前微博上的文章