将数组划分为两部分,前K项为前K大值的集合,无需有序。
while(true) {int flag = nums[k];while(i < k && nums[i] >= flag) {i++;}while(j>k && nums[j] <= flag) {j--;}if (i == j || nums[i] == nums[j]) {break;}int tmp = nums[i];nums[i] = nums[j];nums[j] = tmp;i = 0;j = nums.size() -1;}