南阳提高网站排名,wordpress主题 报纸,网站主机名,织梦怎么更新网站html解题思路#xff1a;
快速选择#xff0c;目标是找出数组中第 k 小#xff08;或第 k 大#xff09;的元素#xff0c;而不是对整个数组进行排序。
#xff08;需要和快排进行区分#xff0c;快排的目的是排序#xff09;
注意#xff1a;
i l - 1, j r 1; 为什…
解题思路
快速选择目标是找出数组中第 k 小或第 k 大的元素而不是对整个数组进行排序。
需要和快排进行区分快排的目的是排序
注意
i l - 1, j r 1; 为什么要这么写而不是 i l; j r ?
因为是先执行do语句的内容一开始进循环就已经先i或者j--了所以进循环前需要-1和1。
class Solution {public int findKthLargest(int[] nums, int k) {int n nums.length;return quickselect(nums, 0, n - 1, n - k);}public int quickselect(int[] nums, int l, int r, int k) {if (l r) return nums[k];int i l - 1, j r 1;while (i j) {do i; while (nums[i] nums[l]);do j--; while (nums[j] nums[l]);if (i j) {int tmp nums[i];nums[i] nums[j];nums[j] tmp;}}if (k j) return quickselect(nums, l, j, k);else return quickselect(nums, j 1, r, k);}
}