1. 程式人生 > 其它 >LeetCode騰訊精選練習50——第十二天

LeetCode騰訊精選練習50——第十二天

技術標籤:LeetCode連結串列資料結構

題目146:LRU快取機制
運用你所掌握的資料結構,設計和實現一個 LRU (最近最少使用) 快取機制 。
實現 LRUCache 類:
LRUCache(int capacity) 以正整數作為容量 capacity 初始化 LRU 快取
int get(int key) 如果關鍵字 key 存在於快取中,則返回關鍵字的值,否則返回 -1 。
void put(int key, int value) 如果關鍵字已經存在,則變更其資料值;如果關鍵字不存在,則插入該組「關鍵字-值」。當快取容量達到上限時,它應該在寫入新資料之前刪除最久未使用的資料值,從而為新的資料值留出空間。

題解:

class LRUCache:
    def __init__(self, capacity: int):        
        self.capacity = capacity
        self.cache = {}
    def get(self, key: int) -> int:
        if key not in self.cache:
            return -1
        self.cache[key] = self.cache.pop(key)
        return self.cache[key]
    def
put(self, key: int, value: int) -> None: if key in self.cache: self.cache.pop(key) self.cache[key] = value if len(self.cache) > self.capacity: x = list(self.cache)[0] self.cache.pop(x)

執行結果:
在這裡插入圖片描述
題目148:排序連結串列
給你連結串列的頭結點 head ,請將其按 升序 排列並返回 排序後的連結串列 。

題解:

class Solution:
    def sortList(self, head: ListNode) -> ListNode:
        nodes = []
        while head:
            nodes.append(head)
            head = head.next
        nodes = sorted(nodes, key = lambda x: x.val)
        cur = head = ListNode()
        for i in range(len(nodes)):
            cur.next = nodes[i]
            cur = cur.next
        
        cur.next = None
        return head.next

執行結果:
在這裡插入圖片描述
題目155:最小棧
設計一個支援 push ,pop ,top 操作,並能在常數時間內檢索到最小元素的棧。
push(x) —— 將元素 x 推入棧中。
pop() —— 刪除棧頂的元素。
top() —— 獲取棧頂元素。
getMin() —— 檢索棧中的最小元素。
題解:

class MinStack:
    def __init__(self):
        self._list = []
    def push(self, x: int) -> None:
        self._list.append(x)
        self._min = min(self._list)
    def pop(self) -> None:
        self._list.pop()
        self._min = not self._list or min(self._list)
    def top(self) -> int:
        return self._list[-1]
    def getMin(self) -> int:
        return self._min

執行結果:
在這裡插入圖片描述