代码随想录算法训练营第十三天| LeetCode239. 滑动窗口最大值、LeetCode前 K 个高频元素(未完成)

239. 滑动窗口最大值

题目描述: 239. 滑动窗口最大值.

解法

from collections import deque

class Myqueue:
    def __init__(self):
        self.queue = deque()

    def pop(self, x):
        if self.queue and x == self.queue[0]:
            self.queue.popleft()

    def push(self,x):
        while self.queue and self.queue[-1] < x:
            self.queue.pop()
        self.queue.append(x)
    
    def front(self):
        if self.queue:
            return self.queue[0]

class Solution(object):
    def maxSlidingWindow(self, nums, k):
        que = Myqueue()
        res = []
        for i in range(k-1):
            que.push(nums[i])
        for i in range(k-1,len(nums)):
            if i >= k :
                que.pop(nums[i-k])
            que.push(nums[i])
            res.append(que.front())
        return res

首先记录一下deque的用法:
deque是一个亮相队列可以完成:
1.单个数据入队
append是在尾部入队,appendleft是在队头入队
2.多个数据入队(可迭代对象)
extend是在尾部多数据入队,extendleft是在队头多数据入队
3.弹出
pop是在尾部弹出,leftpop是在队头弹出
4.索引
deque也可以直接索引,从队头开始
其次是单调队列,在这里面的单调队列不需要将所有元素都放到队列里,加入的元素如果比当前的元素大,那直接将当前的小的元素扔掉(因为当前的小元素肯定会被先淘汰),然后取出元素的时候要看是不是取得当前最大元素,如果是的话,那就证明大元素应该被拿出去了,否则的话不需要进行任何pop操作。

你可能感兴趣的:(算法,leetcode,职场和发展)