算法——TOP K问题最小堆实现扩展

本文介绍了如何将TOP K问题的最小堆实现从基本数据类型int扩展到对象。通过创建一个名为ExMinHeap的泛型类,要求存入堆的对象实现Comparable接口,详细讲解了代码实现,并提供了验证测试用例。
摘要由CSDN通过智能技术生成

1. 概述

上文我们讲到TOP K问题最小堆的实现,采用的比较基本数据类型int。这里我们将扩展到比较对象

2. 代码实现

这里我们直接上代码,这里的扩展最小堆我们取名为ExMinHeap,实现如下

package org.cyxl.common;

/**
 * 扩展最小堆,采用泛型,存储的对象必须实现Comparable接口
 *
 * Created by jeff on 16/5/11.
 */
public class ExMinHeap<T extends Comparable>
{
    // 堆的存储结构 - 数组(这里为Object数组,数组中的具体类型为T)
    private Object[] data;

    /**
     * 初始化堆的大小
     * @param k
     */
    public ExMinHeap(int k)
    {
        this.data = new Object[k];
    }

    /**
     * 调整堆为最小堆, 比较时很重要的一点null为最小
     *
     * @param i
     */
    private void adjustHeap(int i)
    {
        // 获取左右结点的数组下标
        int l = left(i);
        int r = right(i);

        // 这是一个临时变量,表示 跟结点、左结点、右结点中最小的值的结点的下标
        int smallest = i;

        // 存在左结点,且左结点的值小于根结点的值
        T parent = (T)data[i];
        if (l 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值