文章目录
- 前言
- 一、大顶堆和小顶堆是什么?
- 二、使用场景
- 1、从序列中选择最大的K个数(小顶堆)
- 2、从序列中选择最小的K个数(大顶堆)
- 总结
- 参考网址
前言
有时候很容易被大顶堆小顶堆的概念混淆,所以在这里记录一下,同时也方便大家一起学习。
一、大顶堆和小顶堆是什么?
- 大顶堆:每个结点的值都大于或等于其左右孩子结点的值。堆顶元素是堆中最大的元素。
- 小顶堆:每个结点的值都小于或等于其左右孩子结点的值。堆顶元素是堆中最小的元素。
个人理解:大顶堆、小顶堆在使用时主要借用堆顶元素的特点,记住堆顶元素的特点便于理解其应用场景。
二、使用场景
1、从序列中选择最大的K个数(小顶堆)
场景:要选择最大的k个数。
做法:【构造小顶堆(一共k个数)】,每次取数组中剩余数与 【堆顶的元素(k个数中的最小值)】 进行比较。如果新数比堆顶元素大,则删除堆顶元素,并添加这个新数到堆中;如果新数比堆顶元素小,则说明堆中的k个数都比新数大,所以不用进行操作。
2、从序列中选择最小的K个数(大顶堆)
场景:要选择最小的k个数。
做法:【构造大顶堆(一共k个数)】,每次取数组中剩余数与 【堆顶的元素(k个数中的最大数)】 进行比较。如果新数比堆顶元素小,则删除堆顶元素,并添加这个新数到堆中;如果新数比堆顶元素大,则说明堆中的k个数都比新数小,所以不用进行操作。
总结
后面有了新总结再继续补充~
参考网址
关于最大最小的k个数的类型题总结
大顶堆/小顶堆的构建以及排序的应用