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代码