大顶堆和小顶堆的理解
# 大顶堆和小顶堆的理解
https://blog.csdn.net/weixin_42105848/article/details/131034078 前言 有时候很容易被大顶堆小顶堆的概念混淆,所以在这里记录一下,同时也方便大家一起学习。
一、大顶堆和小顶堆是什么? 大顶堆:每个结点的值都大于或等于其左右孩子结点的值。堆顶元素是堆中最大的元素。 小顶堆:每个结点的值都小于或等于其左右孩子结点的值。堆顶元素是堆中最小的元素。 个人理解:大顶堆、小顶堆在使用时主要借用堆顶元素的特点,记住堆顶元素的特点便于理解其应用场景。
二、使用场景 1、从序列中选择最大的K个数(小顶堆) 场景:要选择最大的k个数。 做法:【构造小顶堆(一共k个数)】,每次取数组中剩余数与 【堆顶的元素(k个数中的最小值)】 进行比较。如果新数比堆顶元素大,则删除堆顶元素,并添加这个新数到堆中;如果新数比堆顶元素小,则说明堆中的k个数都比新数大,所以不用进行操作。
2、从序列中选择最小的K个数(大顶堆) 场景:要选择最小的k个数。 做法:【构造大顶堆(一共k个数)】,每次取数组中剩余数与 【堆顶的元素(k个数中的最大数)】 进行比较。如果新数比堆顶元素小,则删除堆顶元素,并添加这个新数到堆中;如果新数比堆顶元素大,则说明堆中的k个数都比新数小,所以不用进行操作。
更新时间: 2023/7/20 22:40:48