在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。
示例 1:
输入:[3,2,1,5,6,4] 和k = 2 输出: 5示例 2:
输入:[3,2,3,1,2,4,5,5,6] 和k = 4 输出: 4说明:
你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度。
快排思想。
class Solution { public: int findKthLargest(vector<int>& nums, int k) { return quick_sort(nums,0,nums.size()-1,k); } int quick_sort(vector<int>& data, int left, int right, int k) { int i=left; int j=left; int pos=data[right]; int len=right-left+1; if(left<right) { for(;j<right;j++) { if(data[j]>pos) { int tmp=data[i]; data[i]=data[j]; data[j]=tmp; i++; } } data[j]=data[i]; data[i]=pos; int w_max=i-left+1; //pos此时处在i处,i-left+1表示pos是第几大的数 if(w_max==k) { return pos; } else if(w_max<k) //比k大的数在右边,则查询右边第k-w_max大的数 { return quick_sort(data,i+1,right,k-w_max); } else //比k大的数在左边,则查询左边第k大 return quick_sort(data,left,i-1,k); } else return pos; } };
leetcode 数组中的第K个最大元素 快排思想
最新推荐文章于 2023-03-23 16:35:53 发布