int findKthLargest(vector<int>& nums, int k) {
int l = 0, u = (int)nums.size() - 1;
k--; // k是1-based,变成下标作比较
while (l <= u) {
int p = partition(nums, l, u);
if (k == p) break;
if (k < p) u = p - 1;
else l = p + 1;
}
return nums[k];
}
int partition(vector<int> &nums, int l, int u) {
if (l >= u) return l;
// 单向划分
// |t| >t | <=t | ? |
// l m i u
int m = l;
for (int i = l + 1; i <= u; i++) {
if (nums[i] > nums[l]) swap(nums[i], nums[++m]);
}
swap(nums[m], nums[l]);
return m;
}