
- 由于找到第K个数,很容易想到是划分分区的方法,划分分区自然想到快排
容易出现问题
- 快排比较的时候,忘记加上等号
递归的快排比较时,一定注意要和基准值相反的数先 ```java Random random = new Random(); public int findKthLargest(int[] nums, int k) { if (nums.length == 0) return 0; return quickSort(nums, 0, nums.length - 1, nums.length - k); }
private int quickSort(int[] arr, int l, int r, int index) { if (l > r) return 0; int i = r, j = l; while (j < i) {
//注意判断加等于号,要和基准值开始的位置的反方向开始走while (j < i && arr[l] <= arr[i])i--;while (j < i && arr[l] >= arr[j])j++;swap(arr, i, j);
} swap(arr, l, i); if (i == index) {
return arr[i];} return i < index ? quickSort(arr, i + 1, r, index) : quickSort(arr, l, i - 1, index); }
private int getRandom(int l, int r) { return l + random.nextInt(r - l + 1); }
private void swap(int[] arr, int i, int j) { int t = arr[i]; arr[i] = arr[j]; arr[j] = t; }
```
