当前位置: 首页 > news >正文

网站域名费怎么查询展厅设计案例100例

网站域名费怎么查询,展厅设计案例100例,网站二次开发费用,合肥市住建局官方网文章目录 题目标题和出处难度题目描述要求示例数据范围 解法思路和算法代码复杂度分析 题目 标题和出处 标题:快照数组 出处:1146. 快照数组 难度 7 级 题目描述 要求 实现支持下列接口的快照数组: SnapshotArray(int length) \textt…

文章目录

  • 题目
    • 标题和出处
    • 难度
    • 题目描述
      • 要求
      • 示例
      • 数据范围
  • 解法
    • 思路和算法
    • 代码
    • 复杂度分析

题目

标题和出处

标题:快照数组

出处:1146. 快照数组

难度

7 级

题目描述

要求

实现支持下列接口的快照数组:

  • SnapshotArray(int length) \texttt{SnapshotArray(int length)} SnapshotArray(int length) 使用给定长度初始化一个类数组的数据结构。初始时,每个元素都等于 0 \texttt{0} 0
  • void set(index, val) \texttt{void set(index, val)} void set(index, val) 将给定的 index \texttt{index} index 处的元素设置为 val \texttt{val} val
  • int snap() \texttt{int snap()} int snap() 获取该数组的快照,并返回快照的编号 snap_id \texttt{snap\_id} snap_id,快照编号是调用 snap() \texttt{snap()} snap() 的总次数减 1 \texttt{1} 1
  • int get(index, snap_id) \texttt{int get(index, snap\_id)} int get(index, snap_id) 根据给定的 snap_id \texttt{snap\_id} snap_id 选择快照,返回该快照在给定的 index \texttt{index} index 的值。

示例

示例 1:

输入:
["SnapshotArray","set","snap","set","get"] \texttt{["SnapshotArray","set","snap","set","get"]} ["SnapshotArray","set","snap","set","get"]
[[3],[0,5],[],[0,6],[0,0]] \texttt{[[3],[0,5],[],[0,6],[0,0]]} [[3],[0,5],[],[0,6],[0,0]]
输出:
[null,null,0,null,5] \texttt{[null,null,0,null,5]} [null,null,0,null,5]
解释:
SnapshotArray snapshotArr = new SnapshotArray(3); \texttt{SnapshotArray snapshotArr = new SnapshotArray(3);} SnapshotArray snapshotArr = new SnapshotArray(3); // 初始化一个长度为 3 \texttt{3} 3 的快照数组
snapshotArr.set(0,5); \texttt{snapshotArr.set(0,5);} snapshotArr.set(0,5); // 赋值 array[0] = 5 \texttt{array[0] = 5} array[0] = 5
snapshotArr.snap(); \texttt{snapshotArr.snap();} snapshotArr.snap(); // 获取快照,返回 snap_id = 0 \texttt{snap\_id = 0} snap_id = 0
snapshotArr.set(0,6); \texttt{snapshotArr.set(0,6);} snapshotArr.set(0,6);
snapshotArr.get(0,0); \texttt{snapshotArr.get(0,0);} snapshotArr.get(0,0); // 获取 snap_id = 0 \texttt{snap\_id = 0} snap_id = 0 的快照中 array[0] \texttt{array[0]} array[0] 的值,返回 5 \texttt{5} 5

数据范围

  • 1 ≤ length ≤ 50000 \texttt{1} \le \texttt{length} \le \texttt{50000} 1length50000
  • 题目最多调用 set \texttt{set} set snap \texttt{snap} snap get \texttt{get} get 操作 50000 \texttt{50000} 50000
  • 0 ≤ index < length \texttt{0} \le \texttt{index} < \texttt{length} 0index<length
  • 0 ≤ snap_id < 调用  snap() 的总次数 \texttt{0} \le \texttt{snap\_id} < 调用~\texttt{snap()}~的总次数 0snap_id<调用 snap() 的总次数
  • 0 ≤ val ≤ 10 9 \texttt{0} \le \texttt{val} \le \texttt{10}^\texttt{9} 0val109

解法

思路和算法

初始时快照编号是 0 0 0。每次调用 snap \textit{snap} snap 操作获取快照时,将快照编号加 1 1 1 并返回更新前的快照编号,因此在整个过程中,快照编号满足非严格单调递增。

对于 set \textit{set} set 操作,在当前快照编号下将快照数组下标 index \textit{index} index 处的元素设为 val \textit{val} val。对于 get \textit{get} get 操作,需要找到快照数组下标 index \textit{index} index 在快照编号不超过 snap_id \textit{snap\_id} snap_id 的最新值。为了实现 set \textit{set} set 操作和 get \textit{get} get 操作,需要对快照数组的每个下标维护元素值信息,即每个下标处需要维护一个列表记录每次更新的快照编号和更新后的元素值,列表中的每个元素为快照编号和最新元素值的对,且按照快照编号非严格升序排序。

对于 set \textit{set} set 操作,在下标 index \textit{index} index 处的列表中添加一个元素,该元素为当前快照编号和 val \textit{val} val 的对。

对于 snap \textit{snap} snap 操作,将快照编号加 1 1 1,并返回更新前的快照编号。

对于 get \textit{get} get 操作,首先获得下标 index \textit{index} index 处的列表,然后在该列表中使用二分查找得到小于等于 snap_id \textit{snap\_id} snap_id 的最大快照编号的元素,并返回该元素的值。

low \textit{low} low high \textit{high} high 分别表示二分查找的下界和上界。由于需要在列表中查找小于等于 snap_id \textit{snap\_id} snap_id 的最大快照编号的元素,因此初始时 low \textit{low} low 等于 − 1 -1 1 high \textit{high} high 等于列表的最大下标。每次查找时,取 mid \textit{mid} mid low \textit{low} low high \textit{high} high 的平均数向上取整,得到列表下标 mid \textit{mid} mid 处的元素的快照编号并与 snap_id \textit{snap\_id} snap_id 比较,调整查找的下标范围。

  • 如果下标 mid \textit{mid} mid 处的元素的快照编号小于等于 snap_id \textit{snap\_id} snap_id,则小于等于 snap_id \textit{snap\_id} snap_id 的最大快照编号所在下标大于等于 mid \textit{mid} mid,因此在下标范围 [ mid , high ] [\textit{mid}, \textit{high}] [mid,high] 中继续查找。

  • 如果下标 mid \textit{mid} mid 处的元素的快照编号大于 snap_id \textit{snap\_id} snap_id,则小于等于 snap_id \textit{snap\_id} snap_id 的最大快照编号所在下标小于 mid \textit{mid} mid,因此在下标范围 [ low , mid − 1 ] [\textit{low}, \textit{mid} - 1] [low,mid1] 中继续查找。

low = high \textit{low} = \textit{high} low=high 时,查找结束。

  • 如果 low ≥ 0 \textit{low} \ge 0 low0,则列表下标 low \textit{low} low 处的元素的快照编号即为小于等于 snap_id \textit{snap\_id} snap_id 的最大快照编号,返回列表下标 low \textit{low} low 处的元素的值。

  • 如果 low < 0 \textit{low} < 0 low<0,则列表中不存在小于等于 snap_id \textit{snap\_id} snap_id 的快照编号,由于初始时快照数组中的每个元素都等于 0 0 0,因此返回 0 0 0

代码

class SnapshotArray {int id = 0;List<int[]>[] snapshots;public SnapshotArray(int length) {snapshots = new List[length];for (int i = 0; i < length; i++) {snapshots[i] = new ArrayList<int[]>();}}public void set(int index, int val) {snapshots[index].add(new int[]{id, val});}public int snap() {int curr = id;id++;return curr;}public int get(int index, int snap_id) {List<int[]> snaplist = snapshots[index];int low = -1, high = snaplist.size() - 1;while (low < high) {int mid = low + (high - low + 1) / 2;if (snaplist.get(mid)[0] <= snap_id) {low = mid;} else {high = mid - 1;}}return low >= 0 ? snaplist.get(low)[1] : 0;}
}

复杂度分析

  • 时间复杂度:构造方法的时间复杂度是 O ( length ) O(\textit{length}) O(length) set \textit{set} set 操作和 snap \textit{snap} snap 操作的时间复杂度是 O ( 1 ) O(1) O(1) get \textit{get} get 操作的时间复杂度是 O ( log ⁡ n ) O(\log n) O(logn),其中 length \textit{length} length 是快照数组的长度, n n n set \textit{set} set 操作的次数。构造方法需要创建长度为 length \textit{length} length 的快照数组并初始化,每次 set \textit{set} set 操作获得列表和向列表中添加元素的时间都是 O ( 1 ) O(1) O(1),每次 snap \textit{snap} snap 操作获得当前快照编号、将快照编号加 1 1 1 和返回更新前的快照编号的时间都是 O ( 1 ) O(1) O(1),每次 get \textit{get} get 操作二分查找的时间是 O ( log ⁡ n ) O(\log n) O(logn)

  • 空间复杂度: O ( length + n ) O(\textit{length} + n) O(length+n),其中 length \textit{length} length 是快照数组的长度, n n n set \textit{set} set 操作的次数。快照数组的长度是 length \textit{length} length,共存储 n n n 个元素,需要 O ( length + n ) O(\textit{length} + n) O(length+n) 的空间。

http://www.yayakq.cn/news/268267/

相关文章:

  • 免费做长图网站深圳有几个区哪个区最富裕
  • wap 2.0的网站做影视网站怎么
  • 相机网站建设规划书网站违规关键词
  • 建立个人网站流程深圳比较好的建站公司
  • 在线设计网站免费公众号版面设计创意
  • 缙云 网站建设比较好的搜索引擎
  • 网站页面效果图怎么做的新媒体营销的概念是什么
  • 多语言网站怎么实现网站开发php岗位职责
  • 苏州互联网企业排名湛江市企业网站seo点击软件
  • 做网站布为网珠海公司注册
  • wordpress服务器加速谷歌seo算法规则
  • 五莲县城乡建设局网站首页wordpress分类规则
  • 网站建设系统规划上海网站建设公司网站
  • 上海网站开发与wordpress模板最新
  • 微网站建设制作管理咨询公司简介
  • 北京南站在哪个区哪个街道网站重新备案怎么做
  • 南宁好的网站建设公司东莞建筑公司前十强
  • 唐山网站建设公司哪家好宁波网站建设推荐荣盛网络好
  • 长沙网站制作培训深圳软件系统开发公司
  • 廊坊做网站的企业哪家好微信网站建设收费标准
  • 成都网站建设收费明细河北建设厅网站电话
  • 做网站字体大小传奇网页游戏排行
  • 关于加强公司 网站建设的通知用c语言怎么做网站
  • 做网站续费地方门户网站备案
  • 成都网站建设哪家好网站二级页面模板
  • 做网站东莞东莞建网站免费注册tk域名
  • 订货网站建设电子政务网站代码
  • 网站开发流程规范宁波网站建设公司哪家好
  • 网站第一关键词怎么做网站建设怎么分好坏
  • 泉州建站公司模板5m带宽做视频网站