Re: [闲聊] 每日LeetCode

楼主: Rushia (みけねこ的鼻屎)   2023-06-11 21:45:11
https://leetcode.com/problems/snapshot-array/description/
1146. Snapshot Array
设计一个支持快照的阵列,他有以下接口:
SnapshotArray(int length) 初始化阵列大小,默认所有元素为0。
void set(index, val) 设置 阵列[index] = val
int snap() 将当前阵列的状态保存成一个快照,返回值是快照id,值为快照次数-1。
int get(index, snap_id) 返回该快照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
思路:
1.因为阵列必须保存修改之前的状态,所以我们在更改和设置阵列的值时,需要带上版本
号资讯(快照id),先将阵列初始化为快照id和值都为0的阵列。
2.set的时候判断如果index位置的版本和当前相同就直接改,否则插入一个新的版本。
3.get的时候只需要把index的所有版本号拿出来并找出版本和snap_id相同的值即可,如果
不存在相同的就返回旧的版本(例如:snap_id=5 但是只有4那就返回4),因为我们在set
元素的时候必定是按照顺序插入的,所以版本号可以用二分搜索去抓出来。
4.snap只要更新快照次数就好。
Java Code:
作者: JIWP (JIWP)   2022-06-11 21:45:00
大师
作者: wwndbk (黑人问号)   2023-06-11 21:46:00
大师
作者: Che31128 (justjoke)   2023-06-11 21:48:00
大师
作者: DDFox (冒险者兼清洁工)   2023-06-11 21:52:00
大师

Links booklink

Contact Us: admin [ a t ] ucptt.com