package com.daily.daily20210122;
import java.util.PriorityQueue;
/**
* @Project: dailyCode
* @Site: http://www.zhao1iang.club/
* @Copyright: ©CodeLamp
* @Author: zhaoliang
* @Create: 2021-01-22 22:04
* @Desc: 数组中的第K个最大元素
**/
public class findKthLargest {
//在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。
// public int findKthLargest(int []nums,int k){
// //大根堆
//
// PriorityQueue<Integer> queue = new PriorityQueue<>();
// for (int num:nums
// ) {
// queue.add(num);
// if (queue.size()>k)
// queue.poll();
// }
// return queue.peek();
// }
public int findKthLargest(int[]nums,int k){
int len = nums.length;
int left =0;
int right =len-1;
//转换一下,第K大元素的索引是len-k
int target = len -k;//第K大元素转换为排序后的len-k
while(true){
int index = parition(nums,left,right);
if(index == target){
return nums[index];
}else if(index < target){
left = index+1;
}else {
right = index;
}
}
}
private int parition(int[] nums, int left, int right) {
int pivot = nums[left];
int j = left;
for (int i = left+1; i <=right ; i++) {
if(nums[i] < pivot){
j++;
swap(nums,j,i);
}
}
swap(nums,j,left);
return j;
}
private void swap(int[] nums, int left, int right) {
int temp = nums[left];
nums[left] = nums[right];
nums[right] = temp;
}
}
日常刷题-数组中的第K个最大元素
最新推荐文章于 2024-08-19 21:18:51 发布