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

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公众号:山青咏芝(shanqingyongzhi)
➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/)
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址:https://www.cnblogs.com/strengthen/p/11297779.html 
➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

Implement a SnapshotArray that supports the following interface:

  • SnapshotArray(int length) initializes an array-like data structure with the given length.  Initially, each element equals 0.
  • void set(index, val) sets the element at the given index to be equal to val.
  • int snap() takes a snapshot of the array and returns the snap_id: the total number of times we called snap() minus 1.
  • int get(index, snap_id) returns the value at the given index, at the time we took the snapshot with the given snap_id

Example 1:

Input: ["SnapshotArray","set","snap","set","get"]
[[3],[0,5],[],[0,6],[0,0]]
Output: [null,null,0,null,5]
Explanation: 
SnapshotArray snapshotArr = new SnapshotArray(3); // set the length to be 3
snapshotArr.set(0,5);  // Set array[0] = 5
snapshotArr.snap();  // Take a snapshot, return snap_id = 0
snapshotArr.set(0,6);
snapshotArr.get(0,0);  // Get the value of array[0] with snap_id = 0, return 5

Constraints:

  • 1 <= length <= 50000
  • At most 50000 calls will be made to setsnap, and get.
  • 0 <= index < length
  • 0 <= snap_id < (the total number of times we call snap())
  • 0 <= val <= 10^9

实现支持下列接口的「快照数组」- 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 次setsnap,和 get的调用 。
  • 0 <= index < length
  • 0 <= snap_id < 我们调用 snap() 的总次数
  • 0 <= val <= 10^9

480ms
 1 class SnapshotArray {
 2 
 3     private var dict = [Int: Int]()
 4     private var snapshots = [[Int: Int]]()
 5     
 6     init(_ length: Int) {
 7         //array = Array(repeating: 0, count: length + 1)
 8     }
 9     
10     func set(_ index: Int, _ val: Int) {
11         dict[index] = val
12     }
13     
14     func snap() -> Int {
15         snapshots.append(dict)
16         return snapshots.count - 1
17     }
18     
19     func get(_ index: Int, _ snap_id: Int) -> Int {
20         return snapshots[snap_id][index] ?? 0
21     }
22 }
23 
24 /**
25  * Your SnapshotArray object will be instantiated and called as such:
26  * let obj = SnapshotArray(length)
27  * obj.set(index, val)
28  * let ret_2: Int = obj.snap()
29  * let ret_3: Int = obj.get(index, snap_id)
30  */

Runtime: 828 ms

Memory Usage: 27.8 MB
 1 class SnapshotArray {
 2     var vv:[[Int:Int]] = [[Int:Int]]()
 3 
 4     init(_ length: Int) {
 5         vv.append([Int:Int]())        
 6     }
 7     
 8     func set(_ index: Int, _ val: Int) {
 9         vv[vv.count - 1][index] = val
10     }
11     
12     func snap() -> Int {
13         vv.append([Int:Int]()) 
14         return vv.count - 2
15     }
16     
17     func get(_ index: Int, _ snap_id: Int) -> Int {
18         for i in stride(from:snap_id,through:0,by:-1)
19         {
20             if vv[i][index] != nil
21             {
22                 return vv[i][index]!
23             }
24         }
25         return 0
26     }
27 }
28 
29 /**
30  * Your SnapshotArray object will be instantiated and called as such:
31  * let obj = SnapshotArray(length)
32  * obj.set(index, val)
33  * let ret_2: Int = obj.snap()
34  * let ret_3: Int = obj.get(index, snap_id)
35  */

 

转载于:https://www.cnblogs.com/strengthen/p/11297779.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/276925.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

aspnet中gridview文本只显示开始几个文本_软网推荐:三个小软件 轻松解决文本操作难题...

TXT文本操作在Windows操作中算是比较容易的事了&#xff0c;但简单的文本操作也会遇到难题。例如&#xff0c;对于我们反复需要使用的多个信息&#xff0c;如果仅靠CtrlC和CtrlV来回复制、粘贴&#xff0c;效率会极低&#xff1b;再如&#xff0c;对于一些软件组件中显示的文本…

刚被IBM收购的红帽,它的下一站是中国

前不久IBM斥资340亿美元收购红帽的新闻震惊了所有人&#xff0c;这个金额是互联网上第三大交易&#xff0c;也是开源史上最大交易。这个收购背后到底有哪些目的&#xff1f;红帽接下来会做什么&#xff1f;11月6日红帽在北京举办红帽论坛&#xff0c;向外界介绍了红帽的想法。 …

验证DetailsView插入数据不为空

验证DetailsView插入数据不为空,在对象数据源ObjectDataScource&#xff08;ChannelDS&#xff09;的Inserting事件中写如下代码&#xff1a;protected void ChannelDS_Inserting(object sender, ObjectDataSourceMethodEventArgs e) { string name "";…

为什么onenote一直在加载_OneNote:科研笔记独一无二的无敌利器

每个人都梦想着自己有超乎常人的记忆力&#xff0c;拥有者过目不忘的技能&#xff0c;从此走向人生巅峰……然而我们都不是那样的人&#xff0c;在这个高速发展的数字新信息时代&#xff0c;进行有效的记忆&#xff0c;保存我们随时到来的灵感等&#xff0c;这就需要我们进行笔…

WPF 实现 DataGrid/ListView 分页控件

原文:WPF 实现 DataGrid/ListView 分页控件在WPF中&#xff0c;通常会选用DataGrid/ListView进行数据展示&#xff0c;如果数据量不多&#xff0c;可以直接一个页面显示出来。如果数据量很大&#xff0c;2000条数据&#xff0c;一次性显示在一个页面中&#xff0c;不仅消耗资源…

Sql Server 中汉字处理排序规则,全角半角

--1. 为数据库指定排序规则CREATEDATABASEdb COLLATE Chinese_PRC_CI_ASGOALTERDATABASEdb COLLATE Chinese_PRC_BINGO/**//**/--2. 为表中的列指定排序规则CREATETABLEtb(col1 varchar(10),col2 varchar(10) COLLATE Chinese_PRC_CI_AS)GOALTERTABLEtb ADDcol3 varchar(10) CO…

解决局域网设置固定IP后无法上网?

1.cmd中输入ipconfig /all查看ip和dns的状态 2.查看自动获取的dns是什么,然后手动设置ip和dns时,和自动获取的保持一样即可 注解&#xff1a;设置后还是无法上网后主要检查ip与dns是否设置错误. 转载于:https://www.cnblogs.com/yanans/p/11301061.html

鼠标输入

一、隐藏并捕捉光标 偏航角和俯仰角是通过鼠标移动获得的&#xff0c;水平的移动影响偏航角&#xff0c;竖直的移动影响俯仰角。 原理是&#xff0c;存储上一帧鼠标的位置&#xff0c;在当前帧中计算鼠标位置与上一帧的位置相差多少。如果水平/竖直差别越大&#xff0c;那么俯仰…

c#用canny算子做边缘提取_机器视觉学习(三)边缘检测

一、边缘检测二、边缘检测流程三、Canny边缘检测前言边缘检测是图像处理和计算机视觉中&#xff0c;尤其是特征提取中的一个研究领域。有许多方法用于边缘检测&#xff0c;它们的绝大部分可以划分为两类&#xff1a;基于一阶导数首先计算边缘强度&#xff0c; 通常用一阶导数表…

一个有关Update类型的存储过程的问题

CREATE PROCEDURE testupdateproc AS declare id int declare trandate datetime declare tranlimit int update test set trandatetrandate, tranlimittranlimit where test.idid GO 存储过程语句如上&#xff0c;检查语法是没有问题的&#xff0c;但是在程序中执行时却不行…

[20190805]在小程序中使用npm包

小程序是可以使用npm包的 1. 初始化npm&#xff1b;&#xff08;在项目目录下输入&#xff09; npm init 此时项目文件夹会创建一个配置信息的package.json文件 2. 手动新建node_modules文件夹&#xff1b;&#xff08;在项目目录下新建&#xff09; 3. 安装npm包&#xff1b; …

bindresult必须在哪个位置_手机视频剪辑工具哪个好?清爽视频编辑APP有人推荐吗?...

作为一个非常喜欢旅游的人&#xff0c;每次出门在外都喜欢发各种照片&#xff0c;以前发照片觉得就能够表达自己的状态和心情&#xff0c;但是随着时间的变化发现&#xff0c;身边的人都开始喜欢发视频了。此前在飞机上拍摄了一段觉得不错的天空视频&#xff0c;想要制作成短片…

[转] 能ping通,但不能上网.

一、感染了病毒所致这种情况往往表现在打开IE时&#xff0c;在IE界面的左下框里提示&#xff1a;正在打开网页&#xff0c;但老半天没响应。在任务管理器里查看进程&#xff0c;&#xff08;进入方法&#xff0c;把鼠标放在任务栏上&#xff0c;按右键—任务管理器—进程&#…

Gradle打包命令记录

Gradle打包命令记录第一种方式&#xff1a;gradle build执行后在在build/lib下生成war包第二种方式&#xff1a;gradle cleangradle --refresh-dependencies assemble

浅谈ASP中Web页面间的数据传递

【简 介】  基于Web的动态网页设计必会涉及到页面间的数据传递&#xff0c;文章探讨了ASP设计中常用的Web页面间的数据传递方式&#xff0c;分析各种数据传递方式的使用方法、使用场合及优缺点&#xff0c;其都是设计阶段选择数据传递方式考虑的关键 往往使用动态网页技术制作…

变频电源出现故障了怎么办,该如何去诊断呢

在变频电源使用时间过长之后就会出现一些小故障&#xff0c;在出现这些小故障的时候很多人都不知道问题出在哪&#xff0c;今天中港扬盛的技术员教你如何的快速诊断变频电源的故障方法。只有及时的发现&#xff0c;这样就能够有效地去解决变频电源所出现的故障。下面就是变频电…

无法访问你试图使用的功能所在的网络位置_[steam实用工具]解决无法访问商店/社区/好友列表的问题...

[steam实用工具]解决无法访问商店/社区/好友列表的问题在我们使用steam的过程中&#xff0c;由于某些原因&#xff0c;在访问商店/社区/好友列表时会被受到限制。针对这种情况&#xff0c;国内的大神些开发出了以下工具来解决我们访问的难题。本文章中的软件由“羽翼诚"大…

tomcat6.0+mysql5.0+jdk5.0+myeclipse6.0打造JSP开发平台

1.下载tomcat6.0(http://tomcat.apache.org/download-60.cgi), mysql5.0(http://download.mysql.cn/src/2006/0710/5543.html), jdk5.0(http://download.mysql.cn/src/2006/0710/5543.html)以及myeclipse6.0(http://www.myeclipseide.com/module-htmlpages-display-pid-4.html)…

程序设计中的感悟

1. 学习应该从基础打起&#xff0c;不要一开始就尝试最高深的技术。 2. 每看一本书&#xff0c;不要说这章我以前学习过了&#xff0c;也掌握的很好&#xff0c;因此我可以跳过这一章看更重要的了。 3. 对于作业&#xff0c;遇到不会的尽量不要立刻向别人请教。如果实在解决…

(转)用Java获得当前性能信息

(转&#xff09;用Java获得当前性能信息 http://www.blogjava.net/amigoxie/archive/2008/04/30/197564.html在Java中&#xff0c;可以获得总的物理内存、剩余的物理内存、已使用的物理内存等信息&#xff0c;本例讲解如何取得这些信息&#xff0c;并且获得在Windows下的内存使…