Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 59f2351

Browse files
Add solution for Snapshot Array
1 parent e68736a commit 59f2351

File tree

2 files changed

+50
-0
lines changed

2 files changed

+50
-0
lines changed

‎README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ Algorithm exercises from LeetCode implemented in Java v11.
3131
- Number of Good Pairs | [Problem](https://leetcode.com/problems/number-of-good-pairs) | [Solution](src/solutions/NumberOfGoodPairs.java)
3232
- Logger Rate Limiter | [Problem](https://leetcode.com/problems/logger-rate-limiter) | [Solution](src/solutions/Logger.java)
3333
- Unique Number of Occurrences | [Problem](https://leetcode.com/problems/unique-number-of-occurrences) | [Solution](src/solutions/UniqueNumberOfOccurrences.java)
34+
- Snapshot Array | [Problem](https://leetcode.com/problems/snapshot-array) | [Solution](src/solutions/SnapshotArray.java)
3435

3536
### Stack
3637
- Min Stack | [Problem](https://leetcode.com/problems/min-stack) | [Solution](src/solutions/MinStack.java)

‎src/solutions/SnapshotArray.java

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package solutions;
2+
3+
// [Problem] https://leetcode.com/problems/snapshot-array
4+
5+
import java.util.ArrayList;
6+
import java.util.HashMap;
7+
import java.util.List;
8+
import java.util.Map;
9+
10+
// Hash table storing differences in each snapshot
11+
class SnapshotArray {
12+
List<Map<Integer, Integer>> diff;
13+
14+
// O(m * n) space
15+
// where m = number of snapshots, n = number of changes in each snapshot
16+
public SnapshotArray(int length) {
17+
diff = new ArrayList<>();
18+
diff.add(new HashMap<>());
19+
}
20+
21+
// O(1) time
22+
public void set(int index, int val) {
23+
diff.get(diff.size() - 1).put(index, val);
24+
}
25+
26+
// O(1) time
27+
public int snap() {
28+
diff.add(new HashMap<>());
29+
return diff.size() - 2;
30+
}
31+
32+
// O(n) time, where n = number of snapshots
33+
public int get(int index, int snapId) {
34+
for (int id = snapId; id >= 0; id--) {
35+
if (diff.get(id).containsKey(index)) {
36+
return diff.get(id).get(index);
37+
}
38+
}
39+
return 0;
40+
}
41+
42+
public static void main(String[] args) {
43+
SnapshotArray snapshotArr = new SnapshotArray(3); // set the length to be 3
44+
snapshotArr.set(0, 5); // Set array[0] = 5
45+
System.out.println(snapshotArr.snap()); // Take a snapshot, return snap_id = 0
46+
snapshotArr.set(0, 6);
47+
System.out.println(snapshotArr.get(0, 0)); // Get the value of array[0] with snap_id = 0, return 5
48+
}
49+
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /