优先队列的数组、二叉堆实现

一个合适的数据结构应该支持两种操作:删除最大元素和插入元素。这种数据类型叫做优先队列

实现栈或是队列与实现优先队列的最大不同在于对性能的要求。对于栈和队列,我们的实现能够在常数时间内完成所有操作;
而对于优先队列,我们刚刚讨论过的所有初级实现中,插入元素删除最大元素这两个操作之一在最坏情况下需要线性时间来完成。

这里写图片描述


API

这里写图片描述

一个优先队列的用例

问题:输入N个字符串,每个字符串都对映着一个整数,从中找出最大的M个整数。
分析:

  • 将输入排序然后从中找出M个最大的元素(不适于输入非常大的情况)
  • 将每个新的输入和已知的M个最大元素比较(除非M较小,否则这种比较的代价非常高昂)
public class TopM
{
    public static void main(String[] args)
    {
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值