寻找数组的第k大数:思路即为对数组进行“简易快速排序”,那么数组的(k-1)位置即为结果:每次使用快速排序后都确定一个mid值,满足在数组中mid右侧的值都比它大,左侧都比他小;若mid==(k-1),那么停止排序;若mid小于(k-1),那么继续对mid右侧进行快排;若mid大于(k-1),则对mid左侧进行快速排序。
该题目的核心还是如何利用快速排序的思想,在快速排序的基础上进行一定的优化
class Solution {
public:
int findKthLargest(vector<int>& nums, int k) {
int left=0,right=nums.size()-1;
int mid;
k=nums.size()-k; //the pos of the k-th largest number
while(left<=right)
{
mid=sorted(nums,left,right);
if(mid==k)
{
// return nums[mid];
break;
}
else
{
if(mid<k)
left=mid+1;
else
right=mid-1;
}
}
return nums[mid];
}
int sorted(vector<int>& nums,int begin,int end)
{
int flag=nums[begin];
while(begin<end)
{
while(begin<end&&flag<=nums[end])
end--;
nums[begin]=nums[end];
while(begin<end&&flag>nums[begin])
begin++;
nums[end]=nums[begin];
}
nums[begin]=flag;
return begin;
}
};
本文介绍了一种基于快速排序思想寻找数组中第K大数的高效算法。通过简易快速排序,每次迭代都能找到一个基准元素,使得其左边的元素都不大于它,右边的元素都不小于它。根据这个特性逐步缩小搜索范围直到找到目标元素。
415

被折叠的 条评论
为什么被折叠?



