LeetCode: 核心算法(快速选择)
场景:
解决Top K问题
例如:
输入: [3,2,1,5,6,4] 和 k = 2 输出: 5
解决方法:
此类问题一般都是通过一次快排或者大顶堆的方式解决,但是都有问题:
快排:对全数组进行了排序,如果要寻找的是第K个大的元素,那么其实我们并不关心从小到大排序后数组的第K位之后的数字;但是快排依然对这些数字进行了排序
大顶堆:虽然大顶堆的方法解决了不用考虑第K位之后的数字的问题,但是它依然需要关心第K位之前的数字,所以依然浪费了很多时间
问题分析
仔细想想Top K问题,其实我们本身只关心第K位上的数字。因为在数组中数字不重复的情况下,第K个最大的数字,必然位于第K-1位上。以例子中的[3,2,1,5,6,4]为例,假设寻找Top 4:
上一篇:
IDEA上Java项目控制台中文乱码