Randomized-Select
解决哪类问题
:::success 求解无序数组第K大/小元素(数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素) :::
代码模板
class Solution {public int findKthLargest(int[] nums, int k) {return quickSort(nums, k, 0, nums.length - 1);}int quickSort(int[] nums,int k, int l, int r) {if(l == r) return nums[l];int left = l - 1, right = r + 1;int mid = nums[l + r >> 1];while(left < right){while(nums[++left] > mid);while(nums[--right] < mid);if(left < right) swap(nums, left, right);}int number = right - l + 1;if(number >= k) return quick_sort(nums, k, l, right);return quickSort(nums, k - number, right + 1,r);}private void swap(int[] nums, int left, int right) {int temp = nums[left];nums[left] = nums[right];nums[right] = temp;}}
