一开始很简单的考虑直接用 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中
啊啊啊, 赶紧把卡先打了,然后再过一会儿二刷有更多的收获再记录下来