大顶堆、并查集、单调栈这几个类型的题目目前还搞不明白,需要反复钻研,现在做一个总结记录。(短期内集中攻坚)
堆
参考博客:堆排序详解–大顶堆
还是不太明白创建初始堆的顺序是啥。。交换收尾之后重新调整这个过程大概懂了
来几个例题,之后可以看看:
剑指 Offer 40. 最小的k个数
剑指 Offer 41. 数据流中的中位数
并查集
单调栈
单调栈的这个定义很重要。。过程倒是很简单,理解一下就好了。
- 单调递增栈:单调递增栈就是从栈底到栈顶数据是从大到小
- 单调递减栈:单调递减栈就是从栈底到栈顶数据是从小到大
现在有一组数10,3,7,4,12。从左到右依次入栈,则如果栈为空或入栈元素值小于栈顶元素值,则入栈;否则,如果入栈则会破坏栈的单调性,则需要把比入栈元素小的元素全部出栈。单调递减的栈反之。
-
10入栈时,栈为空,直接入栈,栈内元素为10。
-
3入栈时,栈顶元素10比3大,则入栈,栈内元素为10,3。
-
7入栈时,栈顶元素3比7小,则栈顶元素出栈,此时栈顶元素为10,比7大,则7入栈,栈内元素为10,7。
-
4入栈时,栈顶元素7比4大,则入栈,栈内元素为10,7,4。
-
12入栈时,栈顶元素4比12小,4出栈,此时栈顶元素为7,仍比12小,栈顶元素7继续出栈,此时栈顶元素为10,仍比12小,10出栈,此时栈为空,12入栈,栈内元素为12。
参考博客:[数据结构]——单调栈