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

239.滑动窗口最大值 (一刷至少需要理解思路)

之前讲的都是栈的应用,这次该是队列的应用了。

本题算比较有难度的,需要自己去构造单调队列,建议先看视频来理解。

题目链接/文章讲解/视频讲解:https://programmercarl.com/0239.%E6%BB%91%E5%8A%A8%E7%AA%97%E5%8F%A3%E6%9C%80%E5%A4%A7%E5%80%BC.html

自定义了一个单调队列,神奇

需要三个函数,pop()、push()、getMaxValue()

本题没有认真写,道理都懂,但是建议重刷

347.前 K 个高频元素  (一刷至少需要理解思路)

大/小顶堆的应用, 在C++中就是优先级队列

本题是大数据中取前k值的经典思路,了解想法之后,不算难。

题目链接/文章讲解/视频讲解:https://programmercarl.com/0347.%E5%89%8DK%E4%B8%AA%E9%AB%98%E9%A2%91%E5%85%83%E7%B4%A0.html

运用了小顶堆,就是小数值在根部(虽然不是很懂一个堆哪里来的树杈和根。。。)

哦,发现了,建立小顶堆的时候建立成了二叉树的样式

建议重刷,这数组和表建立的,一个比一个看起来复杂。。。

缺省情况下priority_queue利用max-heap(大顶堆)完成对元素的排序,这个大顶堆是以vector为表现形式的complete binary tree(完全二叉树)。

注意:

1、对于:priority_queue<pair<int, int>, vector<pair<int, int>>, mycomparsion> pri_que;

2、对于.first:

3、对于public:和private:

注意:private可以通过函数间接的访问

4、对于unordered_map<int, int>::iterator it = map.begin();

5、对于python中的map_.get(nums[i], 0):

如果nums[i]在map里面则返回nums[i], 否则返回0

总结

栈与队列做一个总结吧,加油

https://programmercarl.com/%E6%A0%88%E4%B8%8E%E9%98%9F%E5%88%97%E6%80%BB%E7%BB%93.html 

可以出一道面试题:栈里面的元素在内存中是连续分布的么?

这个问题有两个陷阱:

陷阱1:栈是容器适配器,底层容器使用不同的容器,导致栈内数据在内存中是不是连续分布。

陷阱2:缺省情况下,默认底层容器是deque,那么deque的在内存中的数据分布是什么样的呢? 答案是:不连续的,下文也会提到deque。

以下是第二题python代码

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容