代码随想录算法训练营第十三天| 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操作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值