1146. Snapshot Array

Implement a SnapshotArray that supports the following interface:

  • SnapshotArray(int length) initializes an array-like data structure with the given length.  Initially, each element equals 0.
  • void set(index, val) sets the element at the given index to be equal to val.
  • int snap() takes a snapshot of the array and returns the snap_id: the total number of times we called snap() minus 1.
  • int get(index, snap_id) returns the value at the given index, at the time we took the snapshot with the given snap_id

 

 

Solution0:

class SnapshotArray:

    def __init__(self, length: int):
        self.array = [[0] for i in range(length)]
        self.indx = [[0] for i in range(length)]
        self.snaps = 0

    def set(self, index: int, val: int) -> None:
        snaps = self.snaps
        self.indx[index].append(snaps)
        self.array[index].append(val)

    def snap(self) -> int:
        self.snaps += 1
        return self.snaps - 1

    def get(self, index: int, snap_id: int) -> int:

        if not self.indx[index]:
            return 0
        left = 0
        right = len(self.indx[index]) - 1
        while (left < right):
            mid = left + (right - left)//2 
            if (self.indx[index][mid] > snap_id):
                right = mid
            else:
                left = mid + 1
        
        if self.indx[index][left] > snap_id:
            return self.array[index][left-1]
        else:
            return self.array[index][left]

 

Solution1:

class SnapshotArray(object):

    def __init__(self, length):
        """
        :type length: int
        """
        self.snaps = 0
        self.store = dict()
        self.store[0] = dict()
        
        

    def set(self, index, val):
        """
        :type index: int
        :type val: int
        :rtype: None
        """
        self.store[self.snaps][index] = val
        

    def snap(self):
        """
        :rtype: int
        """
        self.snaps += 1
        a = (self.store[self.snaps -1]).copy()
        self.store[self.snaps] = a
        return self.snaps -1
            

    def get(self, index, snap_id):
        """
        :type index: int
        :type snap_id: int
        :rtype: int
        """
        if index in self.store[snap_id]:
            return self.store[snap_id][index]
        else:
            return 0

 

posted @ 2020-01-09 12:47  蠢材少年  阅读(158)  评论(0编辑  收藏  举报