from operator import add, sub, mul
def div(x, y):
return int(x // y) if x * y > 0 else -(abs(x) // abs(y))
class Solution:
def evalRPN(self, tokens: List[str]) -> int:
op_map = {'+': add, '-':sub, '*': mul, '/': div}
stak = []
for i in tokens:
if i not in op_map:
stak.append(int(i))
else:
b = stak.pop()
a = stak.pop()
stak.append(op_map[i](a, b))
return stak.pop()
from collections import deque
class MyQueue():
def __init__(self):
self.queue = deque()
def pop(self, value):
if self.queue and value == self.queue[0]:
self.queue.popleft()
def push(self, value):
while self.queue and self.queue[-1] < value:
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]:
res = []
que = MyQueue()
for i in range(k):
que.push(nums[i])
res.append(que.front())
for i in range(k, len(nums)):
que.pop(nums[i - k])
que.push(nums[i])
res.append(que.front())
return res
这题知道意思,但是实现起来,还是有细节要注意的。
import heapq
class Solution:
def topKFrequent(self, nums: List[int], k: int) -> List[int]:
# 获取频次
cnt = {}
for i in nums:
cnt[i] = cnt.get(i, 0) + 1
# 小顶堆排序
pri_que = []
for i, f in cnt.items():
heapq.heappush(pri_que, (f, i))
if len(pri_que) > k:
heapq.heappop(pri_que)
# 倒序输出
res = [0] * k
for i in range(k - 1, -1, -1):
res[i] = heapq.heappop(pri_que)[1]
return res