代码随想录算法训练营第十三天| 239. 滑动窗口最大值 347.前 K 个高频元素

239. 滑动窗口最大值

一开始很简单的考虑直接用 HashMap 进行存储有效窗口的数值,每一次形成窗口之后进行一次最大值的计算,但是意想不到的超时了。因为每一次找最大值O(K)的复杂度,窗口一共有[n-k+1]个 总复杂度是O(k(n-k+1)),看来力扣觉得太高啦

看了题解发现,对于我来说,这个题目很巧妙的并不是Heap(因为说存储最大值的时候很容易会想到Heap), 而是里面存储的数据并不是只有k个, 而是从 0 到 右窗口 个,而我们需要Pop 的数据是比当前值大的但是已经不在合格窗口的那些值,比他小的我也不在乎,就放在Heap里即可。
这样就可以写出代码了。
PS: 固定窗口我喜欢还是分开写2个循环,方便理解

他的进阶写法是单调栈, 暂时先不看

347.前 K 个高频元素
我已经是2刷了,一看就知道思路,建堆,加数据。
这道题更多的是不熟悉 JAVA语言,之前写的时候放在Heap里是int[],今天心血来潮想放entry, 但是具体的语言又不会了。。
而根据放在PQ里的数值可以分为3种,建议小伙伴有时间可以分别实现一下,也是练习自己的程序编写能力
1: 放entry到query
2: 只放key
3: 放key value Set 到query中

啊啊啊, 赶紧把卡先打了,然后再过一会儿二刷有更多的收获再记录下来

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值