在数组中找到第k大的元素
您在真实的面试中是否遇到过这个题?Yes
例子
给出数组[9,3,2,4,8]。第三大的元素是4
给出数组 [1,2,3,4,5]。第一大的元素是5,第二大的元素是4,第三大的元素是3,以此类推
注意
你能够交换数组中的元素的位置
挑战
标签 Expand 要求时间复杂度为O(n),空间复杂度为O(1)
相关题目 Expand
分析:利用快排的思想。不断partition,
代码:
class Solution { public: /* * param k : description of k * param nums : description of array and index 0 ~ n-1 * return: description of return */ int kthLargestElement(int k, vector<int> nums) { // write your code here return findKthLargestElement(k,nums,0,nums.size()-1); } int findKthLargestElement(int k,vector<int>& nums,int start,int end) { if(start==end) return nums[start]; int index = partition(nums,start,end); if(end-index+1==k) return nums[index]; else if(end-index+1>k) return findKthLargestElement(k,nums,index+1,end); else return findKthLargestElement(k-(end-index+1),nums,start,index-1); } int partition(vector<int>&nums,int start,int end) { int x = (start+end)/2; swap(nums[start],nums[x]); int i = start+1; int j = i; while(i<=end&&j<=end) { if(nums[j]<nums[start]) { swap(nums[i],nums[j]); i++; } j++; } swap(nums[start],nums[i-1]); return i-1; } };