一、239. 滑动窗口最大值
对题目的看法:
想用队列或者列表去遍历。看了卡哥后,用队列进行求解。代码如下:
from collections import deque
class MyQueue:
def __init__ (self):
self.queue = deque()
def pop(self,value):
if self.queue and self.queue[0] == value:
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]:
que = MyQueue()
result =[]
for i in range(k):
que.push(nums[i])
result.append(que.front())
for i in range(k,len(nums)):
que.pop(nums[i-k])
que.push(nums[i])
result.append(que.front())
return result
结果:
二、347.前 K 个高频元素
对题目的想法:用字典统计每个数字出现的次数,最后排序取前k个。
代码如下:
class Solution:
def topKFrequent(self, nums: List[int], k: int) -> List[int]:
time_dict = defaultdict(int)
for num in nums:
time_dict[num] +=1
index_dict = defaultdict(list)
for key in time_dict:
index_dict[time_dict[key]].append(key)
key = list(index_dict.keys())
key.sort()
result = []
cnt = 0
while key and cnt != k:
result +=index_dict[key[-1]]
cnt += len(index_dict[key[-1]])
key.pop()
return result[0:k]
结果: