一百道编程题| 11 第k小整数

目录

一、思路

二、求解

三、知识点


一、思路

       去重:

     使用一个布尔数组(如 st[N])来标记已经出现过的整数。遍历输入的 n 个正整数,对于每个数 x,若 st[x] 为 true,说明该数已出现过,直接跳过;若为 false,则将其标记为 true,并进行后续处理。这样可以实现相同大小的整数只计算一次。

      维护有序集合:

       利用优先队列(堆)来维护当前已处理整数中的较小数集合。为了方便获取第 k 小的数,使用大根堆。将去重后的整数依次加入大根堆中。

       获取第 k 小的数:

     加入完所有去重后的整数后,若堆中元素个数小于 k,说明不存在第 k 小的数,输出 NO RESULT;若堆中元素个数等于 k,则堆顶元素即为第 k 小的数,输出堆顶元素。

二、求解

    三、知识点

    布尔数组:

          一种特殊的数组,其元素只有 true 和 false 两种状态,常用于标记某些状态或记录元素是否出现过等场景。

    堆:

           一种特殊的数据结构,它可以看作是一棵完全二叉树。小根堆的特点是每个节点的值都小于或等于其子节点的值,堆顶元素是整个堆中的最小值;大根堆则相反,每个节点的值都大于或等于其子节点的值,堆顶元素是最大值。在本题中,使用大根堆来高效地维护和获取较大的数。

     

     

    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    抵扣说明:

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

    余额充值