数组中的第k大元素
leetcode上面题目
需要运用到快速排序,position方法返回数组此时的数组下标index,如果index的值和nums.length-k == index的话,直接放回nums[index],
如果k < index的话,需要对left、index - 1进行继续划分,否则对index + 1, right找到index值
class Solution { public int findKthLargest(int[] nums, int k) { return sort(nums, 0, nums.length - 1, nums.length - k); } private int sort(int[] nums, int left, int right, int k) { int index = position(nums, left, right); if (index == k) { return nums[k]; } return k < index ? sort(nums, left, index - 1, k) : sort(nums, index + 1, right, k); } private int position(int [] nums, int left, int right) { if (left < right) { int x = nums[left], i = left, j = right; while (i < j) { while (i < j && nums[j] > x) { j--; } if (i < j) { nums[i++] = nums[j]; } while (i < j && nums[i] < x) { i++; } if (i < j) { nums[j--] = nums[i]; } } nums[i] = x; return i; } return left; } }

浙公网安备 33010602011771号