---恢复内容开始---
题目:在一个整数序列中寻找第k大的元素。
注意几个问题:
1)k的取值:是不变的啊! 不会因为递归时在privot的左边或者右边寻找而改变,因为nums的长度n是不变的,元素的下标也是不变的;
2)partition函数递归调用自己时是要加return的!不然会报错。
class Solution { public: int partition(vector<int>& nums, int k, int l, int r){ int n = nums.size(); swap(nums[l],nums[rand()%(r-l+1)+l]); //生成随机数 int p = nums[l]; //nums[l+1...i) <=v ; nums(j...r] >=v i和j 是需要考察的元素,所以是开区间 int i = l+1, j = r; //初始定义区间为空 while(true){ while(i<=r && nums[i]<p) i++; while(j>=l+1 && nums[j]>p) j--; if(i>j) break; swap(nums[i], nums[j]); i++; j--; } swap(nums[l], nums[j]); if(j == n-k) return nums[j]; else if(j < n-k) return partition(nums, k, j+1,r); else return partition(nums, k, l, j-1); } int findKthLargest(vector<int>& nums, int k) { srand(time(NULL)); int n = nums.size(); return partition(nums, k, 0, n-1); } };