150. 逆波蘭表達式求值
題目
思路與解法
第一思路: 比較簡單
class Solution:def evalRPN(self, tokens: List[str]) -> int:stack = []for item in tokens:if item != '+' and item != '-' and item != '*' and item != '/' :stack.append(item)else:b = int(stack.pop())a = int(stack.pop())if item == '+':stack.append(a + b)elif item == '-':stack.append(a - b)elif item == '*':stack.append(a * b)elif item == '/':stack.append(a/b)return int(stack.pop())
239. 滑動窗口最大值
題目
思路與解法
第一思路: 無
carl的思路 : 滑動窗口解法,值得后面認真看看細節,歸納一下
from collections import deque
class MyQueue(object): # 單調隊列def __init__(self):self.queue = deque()def pop(self, value):if self.queue and value == self.queue[0]:return self.queue.popleft()def push(self, value):while self.queue and value > self.queue[-1]:self.queue.pop()self.queue.append(value)def front(self):return self.queue[0]class Solution:def maxSlidingWindow(self, nums: List[int], k: int) -> List[int]:myque = MyQueue()res = []lens = len(nums)i=0if i + k <= lens:while i < k:myque.push(nums[i])i += 1res.append(myque.front())i=1while i + k <= lens:myque.pop(nums[i-1])myque.push(nums[i+k-1])res.append(myque.front())i += 1return res
347.前 K 個高頻元素
題目
思路與解法
第一思路: 先統計數量,在得出前k多的值。但是不知道怎么實現。有點被誤導,因為要很技巧性,其實感覺很粗暴
carl的講解: 先用字典統計,再將字典key-value互換,然后將互換后的keys(values)方法到list中,進行排序,得出按順序的出現次數,再通過出現次數去找對應的值。
class Solution:def topKFrequent(self, nums: List[int], k: int) -> List[int]:from collections import defaultdictres = []item_dict = defaultdict(int)for item in nums:item_dict[item] += 1time_dict = defaultdict(list) for key in item_dict.keys():time_dict[item_dict[key]].append(key)times = time_dict.keys()times = list(times)times.sort() # 從小往大count = 0 # 記載存入res中的總個數while count < k:res.extend(time_dict[times[-1]])count += len(time_dict[times[-1]])times.pop()return res