Untitled
Thank you bhai ! BruteForce(C++) and Optimal Solution(Java): Memory Limited Exceeded: class SnapshotArray { public: vector<vector<int>> vec; int snapId; vector<int> arr; SnapshotArray(int length) { snapId = 0; arr.resize(length,0); } void set(int index, int val) { arr[index] = val; } int snap() { vec.push_back(arr); return snapId++; } int get(int index, int snap_id) { return vec[snap_id][index]; } }; Optimal Java: class SnapshotArray { private int snapId; private List<List<Pair<Integer,Integer>>> list; public SnapshotArray(int length) { this.snapId = 0; this.list = new ArrayList<>(length); for(int i=0; i<length; i++) { List<Pair<Integer,Integer>> temp = new ArrayList<>(); // temp.add(new Pair(0,0)); // list.add(i,temp); } } public void set(int index, int val) { list.get(index).add(new Pair(snapId, val)); } public int snap() { return snapId++; } // upperbound public int get(int index, int snap_id) { int start=0; int end = list.get(index).size()-1; int ans = 0; while(start <= end) { int mid = start + (end-start)/2; if((list.get(index).get(mid).getKey()) <= snap_id) { ans = list.get(index).get(mid).getValue(); start = mid+1; } else { end = mid-1; } } return ans; } }
Leave a Comment