给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。
public int findKthLargest(int[] nums, int k) {
int start = 0;
int end = nums.length -1;
int index = partition(nums, start, end);
int target = nums.length - k;
while(index != target){
   if(index < target){
          start = index + 1;
          index = partition(nums, start, end);
      } else {
          end = index - 1;
          index = partition(nums, start, end);
     }
}
return nums[target];
}
public int partition(int[] nums, int start, int end){
        int point= nums[start];
        int i = start;
        for (int j = start + 1; j <= end; j++) {
            if (nums[j] < point) {
                // j 的初值为 left,先右移,再交换,小于 pivot 的元素都被交换到前面
                i++;
                int temp = nums[i];
                nums[i] = nums[j];
                nums[j] = temp;
            }
        }
        int temp2 = nums[i];
        nums[i] = nums[start];
        nums[start] = temp2;
        return i;
    }











网友评论