package leetcode;

import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;

/**
 * https://leetcode.com/problems/snapshot-array/
 */
public class Problem1146 {
    private static class SnapshotArray {
        private final int length;
        private int snapshot;
        private final Map</*snapshot ID*/ Integer, int[]> snapshots = new HashMap<>();

        public SnapshotArray(int length) {
            this.length = length;
            snapshots.put(snapshot, new int[length]);
        }

        public void set(int index, int val) {
            snapshots.get(snapshot)[index] = val;
        }

        public int snap() {
            snapshots.put(snapshot + 1,
                Arrays.copyOf(snapshots.get(snapshot), length));
            return snapshot++;
        }

        public int get(int index, int snap_id) {
            if (!snapshots.containsKey(snap_id)) {
                return 0;
            }
            return snapshots.get(snap_id)[index];
        }
    }

    public static void main(String[] args) {
        SnapshotArray sa = new SnapshotArray(3);
        sa.set(0, 5);
        System.out.println(sa.snap()); // 0
        sa.set(0, 6);
        System.out.println(sa.get(0, 0)); // 5

//        sa = new SnapshotArray(1);
//        sa.set(0, 15);
//        System.out.println(sa.snap()); // 0
//        System.out.println(sa.snap()); // 1
//        System.out.println(sa.snap()); // 2
//        System.out.println(sa.get(0, 2)); // 15
//        System.out.println(sa.snap()); // 3
//        System.out.println(sa.snap()); // 4
//        System.out.println(sa.get(0, 0)); // 15
    }
}

@@ -16,33 +16,8 @@
 e;%0A%0A
-import java.util.Arrays;%0A
 impo
@@ -190,42 +190,8 @@
 y %7B%0A
-        private final int length;%0A
     
@@ -271,13 +271,29 @@
 er, 
-int%5B%5D
+Map%3CInteger, Integer%3E
 %3E sn
@@ -367,42 +367,8 @@
 ) %7B%0A
-            this.length = length;%0A
     
@@ -407,19 +407,19 @@
 new 
-int%5Blength%5D
+HashMap%3C%3E()
 );%0A 
@@ -513,21 +513,24 @@
 hot)
-%5B
+.put(
 index
-%5D =
+,
  val
+)
 ;%0A  
@@ -626,21 +626,21 @@
     
-Arrays.copyOf
+new HashMap%3C%3E
 (sna
@@ -663,16 +663,8 @@
 hot)
-, length
 ));%0A
@@ -890,655 +890,42 @@
 _id)
-%5Bindex%5D;%0A        %7D%0A    %7D%0A%0A    public static void main(String%5B%5D args) %7B%0A        SnapshotArray sa = new SnapshotArray(3);%0A        sa.set(0, 5);%0A        System.out.println(sa.snap()); // 0%0A        sa.set(0, 6);%0A        System.out.println(sa.get(0, 0)); // 5%0A%0A//        sa = new SnapshotArray(1);%0A//        sa.set(0, 15);%0A//        System.out.println(sa.snap()); // 0%0A//        System.out.println(sa.snap()); // 1%0A//        System.out.println(sa.snap()); // 2%0A//        System.out.println(sa.get(0, 2)); // 15%0A//        System.out.println(sa.snap()); // 3%0A//        System.out.println(sa.snap()); // 4%0A//        System.out.println(sa.get(0, 0)); // 15
+.getOrDefault(index, 0);%0A        %7D
 %0A   

Solve problem 1146