zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    node 中的 异步地狱回调
    node 同步和异步的概念
    【Node】File System
    阅读《软技能:代码之外的生存指南》读书笔记
    整理前端学习资料以便日后查看
    【css】单选框和复选框文字垂直居中问题
    [CSS]图片与文字对齐问题--摘自张鑫旭博客
    百度首页换一换功能js实现
    个人加分项
    开课第十五周周总结
  • 原文地址:https://www.cnblogs.com/beatets/p/12170846.html
Copyright © 2011-2022 走看看