码迷,mamicode.com
首页 > 其他好文 > 详细

Snapshot Array

时间:2019-09-18 13:17:13      阅读:121      评论:0      收藏:0      [点我收藏+]

标签:structure   _id   and   leetcode   ret   may   point   length   snap   

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

分析: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

标签:structure   _id   and   leetcode   ret   may   point   length   snap   

原文地址:https://www.cnblogs.com/beiyeqingteng/p/11541223.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!