算法刷题-栈和队列-Leetcode-239. 滑动窗口最大值,347.前 K 个高频元素(python)

本文介绍了如何使用Python解决滑动窗口问题(如求区间最大值和前k个高频元素),包括暴力求解、队列优化算法以及字典排序的应用。重点讨论了队列在处理滑动窗口中的作用以及如何利用enumerate函数确定最大值位置。
摘要由CSDN通过智能技术生成

239. 滑动窗口最大值

背景:给一个nums数组,一个长度k,求挪动滑动窗口区间里最大值

思路:

  1. 思路1:直接求区间最大值,每次挪动区间步长为k,每次直接比较最大值添加至结果,but ,可能太暴力,超时啦
  2. 思路2:大体思路为要求滑动窗口区间里元素的最大值,则统计遍历过的窗口元素并通过队列从大到小排序(为什么用队列不用栈?因为比较的是最左侧元素,用队列更方便实现最左边是最大值),每新增一个元素,则去掉一个窗口外的元素,去掉时怎么判断新的窗口最大元素呢?因为已经记录上一个窗口数值情况并从大到小排序,每次比较当前元素和队列左侧的大小,如果比队列左侧大,则更新队列元素即加入新元素;这里面有一个难题,一旦根据大小排序了,那么比较时候怎么确定最大值的位置呢,所以使用enumerate函数,给出num时候给出坐标,然后队列中也存放最大值对应的坐标,这样只要依次判断,如果当前元素位置和最大值即(队列左端位置)范围在区间内,则直接统计最大值;若是超出区间范围则需要递减往下取最大值。

实践:

复盘:deq[-1]==(队列右侧元素),deq[0]==(队列左侧元素),deq.pop()==(从队列右侧删除元素),deq.popleft()==(从队列左侧删除元素)

i>=k-1即从第1个区间开始统计


347.前 K 个高频元素

背景:给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。

思路:

        思路1:统计数组所有数出现频次,按照频率次数倒叙,输出前k个

        思路2:排序思路暂时没看懂,再研究研究

实践:

复盘:字典排序可以使用sorted(dic.items(),key=lambda x:x[1],reverse=True) 最后取列表中第一个值,则可以用列表生成式【item[0] for item in dic】


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值