目录
一、思路
去重:
使用一个布尔数组(如 st[N])来标记已经出现过的整数。遍历输入的 n 个正整数,对于每个数 x,若 st[x] 为 true,说明该数已出现过,直接跳过;若为 false,则将其标记为 true,并进行后续处理。这样可以实现相同大小的整数只计算一次。
维护有序集合:
利用优先队列(堆)来维护当前已处理整数中的较小数集合。为了方便获取第 k 小的数,使用大根堆。将去重后的整数依次加入大根堆中。
获取第 k 小的数:
加入完所有去重后的整数后,若堆中元素个数小于 k,说明不存在第 k 小的数,输出 NO RESULT;若堆中元素个数等于 k,则堆顶元素即为第 k 小的数,输出堆顶元素。
二、求解
三、知识点
布尔数组:
一种特殊的数组,其元素只有 true 和 false 两种状态,常用于标记某些状态或记录元素是否出现过等场景。
堆:
一种特殊的数据结构,它可以看作是一棵完全二叉树。小根堆的特点是每个节点的值都小于或等于其子节点的值,堆顶元素是整个堆中的最小值;大根堆则相反,每个节点的值都大于或等于其子节点的值,堆顶元素是最大值。在本题中,使用大根堆来高效地维护和获取较大的数。