Untitled
unknown
plain_text
a year ago
1.7 kB
13
Indexable
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;
}
}
Editor is loading...
Leave a Comment