介绍:对的定义和应用。

1 构造一个堆

(1)每次新增操作之后,需要调整堆siftUpComparable:将最后一个元素endIndex和(endIndex-1)/2的元素比较,如果比这个父元素大,就上移动。

(2)每次获取array[0]元素之后,需要调整堆siftDownComparable:将最后一个元素放置在a[0]执行下移动,和(currentIndex*2+1),(currentIndex*2+2)两个元素,如果比这两个子元素都大,那么此时就不执行下移动。否则选择这两个子元素最大的那个与这个元素替换。

2  查询top N

实例1  数组最小K个数

设计一个算法,找出数组中最小的k个数。以任意顺序返回这k个数均可。https://leetcode-cn.com/problems/smallest-k-lcci/

代码

实例2 前k高频元素

给定一个非空的整数数组,返回其中出现频率前 k 高的元素 。https://leetcode-cn.com/problems/top-k-frequent-elements/

思路: 借助Map和优先级队列。

分类&标签