Untitled

 avatar
unknown
plain_text
2 months ago
1.7 kB
1
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;
    }
}

Leave a Comment