
cpp
class Solution {
public:
int findKthLargest(vector<int>& nums, int k) {
int i=0;
int j=nums.size()-1;
k=k-1;
while(i<=j){
int p=partition(i,j,nums);
if(p==k)
return nums[p];
else if(p<k){
i=p+1;
while(i<k && nums[i]==nums[i-1])
i++;
}
else{
j=p-1;
while(j>k && nums[j]==nums[j+1])
j--;
}
}
return -1;
}
int partition(int i,int j,vector<int>& nums){
int left=i+1;
int right=j;
int tmp=nums[i];
while(left<=right){
while(nums[left]>=tmp && left<j){
left+=1;
}
while(nums[right]<=tmp && right>i){
right-=1;
}
if (left>=right)
break;
swap(nums[left], nums[right]);
// if(left<right){
// swap(nums[left], nums[right]);
// }
}
// nums[i]=nums[right];
// nums[right]=tmp;
swap(nums[i], nums[right]);
return right;
}
};

Focus:
1 while(i<=j) 里的"="要有。最后是i,j移动
2 while(left<=right) 里的"="要有。 i>j是可以存在的。等于之后,移动right,找到和tmp替换的位置
这道题真的让我清楚的明白了partition我有哪些漏的...