1. 程式人生 > >215 Kth Largest Element in an Array

215 Kth Largest Element in an Array

---恢復內容開始---

題目:在一個整數序列中尋找第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); } };