代码实现:
| class SnapshotArray: |
| |
| def __init__(self, length: int): |
| self.snap_id = 0 |
| self.history = defaultdict(list) |
| |
| def set(self, index: int, val: int) -> None: |
| self.history[index].append((self.snap_id, val)) |
| |
| def snap(self) -> int: |
| snap_id = self.snap_id |
| self.snap_id += 1 |
| return snap_id |
| |
| def get(self, index: int, snap_id: int) -> int: |
| |
| |
| history = self.history[index] |
| target = snap_id + 1 |
| left, right = -1, len(history) |
| while left + 1 < right: |
| mid = (left+right) // 2 |
| if history[mid][0] < target: |
| left = mid |
| else: |
| right = mid |
| selected = right - 1 |
| if selected >= 0: |
| return self.history[index][selected][1] |
| return 0 |
Python-标准库
| class SnapshotArray: |
| |
| def __init__(self, length: int): |
| self.snap_id = 0 |
| self.history = defaultdict(list) |
| |
| def set(self, index: int, val: int) -> None: |
| self.history[index].append((self.snap_id, val)) |
| |
| def snap(self) -> int: |
| snap_id = self.snap_id |
| self.snap_id += 1 |
| return snap_id |
| |
| def get(self, index: int, snap_id: int) -> int: |
| |
| |
| j = bisect_left(self.history[index], (snap_id+1,)) - 1 |
| if j >= 0: |
| return self.history[index][j][1] |
| return 0 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效