Snapshot Array
Posted beiyeqingteng
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Snapshot Array相关的知识,希望对你有一定的参考价值。
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 givenindex
to be equal toval
.int snap()
takes a snapshot of the array and returns thesnap_id
: the total number of times we calledsnap()
minus1
.int get(index, snap_id)
returns the value at the givenindex
, at the time we took the snapshot with the givensnap_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
分析:https://leetcode.com/problems/snapshot-array/
The idea is, the whole array can be large, and we may take the snap tons of times. Instead of record the history of the whole array, we will record the history of each cell. And this is the minimum space that we need to record all information. For each A[i], we will record its history. With a snap_id and a its value. When we want to get the value in history, just binary search the time point.
Complexity Time
SnapshotArray(int length) is O(N) time
set(int index, int val) is O(logSnap)
snap() is O(1)
get(int index, int snap_id) is O(logSnap)
1 class SnapshotArray 2 TreeMap<Integer, Integer>[] A; 3 int snap_id = 0; 4 public SnapshotArray(int length) 5 A = new TreeMap[length]; 6 for (int i = 0; i < length; i++) 7 A[i] = new TreeMap<Integer, Integer>(); 8 A[i].put(0, 0); 9 10 11 12 public void set(int index, int val) 13 A[index].put(snap_id, val); 14 15 16 public int snap() 17 return snap_id++; 18 19 20 public int get(int index, int snap_id) 21 return A[index].floorEntry(snap_id).getValue(); 22 23
以上是关于Snapshot Array的主要内容,如果未能解决你的问题,请参考以下文章
jar 中的名称 SNAPSHOT 是啥意思? / *snapshot*.jars 有啥问题?
maven SNAPSHOT vs BUILD-SNAPSHOT
从 snapshot.bytesTransferred / snapshot.totalBytes Firebase 上传进度数超过 100