Leetcode 239 Sliding Window Maximum
- 题目链接:leetcode.com/problems/sl…
- 文章讲解:代码随想录 programmercarl.com
- 视频讲解:单调队列正式登场!| LeetCode:239. 滑动窗口最大值
- 状态:没做出来
1. 第一想法
想暴解的,但是报一些数据类型的错。懒得修正了...
2. 看完后想法
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 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
3. 总结
常看常新。
Leetcode 347 Top K Frequent Elements
- 题目链接:leetcode.com/problems/to…
- 文章讲解:代码随想录 programmercarl.com
- 视频讲解:优先级队列正式登场!大顶堆、小顶堆该怎么用?| LeetCode:347.前 K 个高频元素
- 状态:没做出来
1. 第一想法
建一个 map 或者 dictionary 之类的,统计次数,然后根据次数排序,把前 k 个打印出来。但是我做过这个题,好像有个超简单的做法来着。
2. 看完后想法
import heapq
class Solution:
def topKFrequent(self, nums: List[int], k: int) -> List[int]:
map_ = {}
for i in range(len(nums)):
map_[nums[i]] = map_.get(nums[i], 0) + 1
pri_que = []
for key, freq in map_.items():
heapq.heappush(pri_que, (freq, key))
if len(pri_que) > k:
heapq.heappop(pri_que)
result = [0] * k
for i in range(k-1, -1, -1):
result[i] = heapq.heappop(pri_que)[1]
return result
3. 总结
常看常新。