Leetcode 1249 Solution

This article provides solution to leetcode question 1249 (snapshot-array)

https://leetcode.com/problems/snapshot-array

Solution

class SnapshotArray:
def __init__(self, length: int): self.value_lists = [[(0, 0)] for _ in range(length)] self.snap_id = 0
def set(self, index: int, val: int) -> None: value_list = self.value_lists[index]
if value_list[-1][0] == self.snap_id: value_list[-1] = (self.snap_id, val) else: value_list.append((self.snap_id, val))
def snap(self) -> int: self.snap_id += 1 return self.snap_id - 1
def get(self, index: int, snap_id: int) -> int: value_list = self.value_lists[index]
l = 0 r = len(value_list) - 1
while l < r: m = (l + r + 1) // 2
if value_list[m][0] > snap_id: r = m - 1 else: l = m
return value_list[l][1]
# Your SnapshotArray object will be instantiated and called as such: # obj = SnapshotArray(length) # obj.set(index,val) # param_2 = obj.snap() # param_3 = obj.get(index,snap_id)