LeetCode215:数组中的第K个最大元素(数组-排序算法-分治算法-堆排序)
1、在未排序的数组中找到第 k 个最大的元素。你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。
方法一:调用库函数:
直接调用库函数
public int findKthLargest(int[] nums, int k) {
Arrays.sort(nums);
return nums[nums.length-k];
}
方法二:快速排序(三路快排):
快速排序(典型的分治算法):对原数组排序,再返回倒数第 k 个位置。
/**
* 数组中的第K个最大元素
* 快速排序:返回倒数第k个位置的元素
* @param nums
* @param k
* @return
*/
public int findKthLargest(int[] nums, int k) {
quickSort3(nums,0,nums.length-1);
return nums[nums.length-k];
}
/**
* 三路快速排序
* 将nums[l,...,r]分为<v,==v,>v三部分
* 之后递归对<v,>v两部分继续进行三路快速排序
* @param nums
* @param left
* @param right
*/
private void quickSort3(int[] nums,int left,int right){
//递归的终止条件
if(left >= right){
return;
}
//递归的内容:partiton过程
//int index = new Random().nextInt(right-left+1)+left;
int index = (Math.abs(new Random().nextInt())%(right-left+1))+left;
int temp &