第一种方法:快排
思想就是先用快排排好序,由小到大进行排序,则第k大元素就是倒数第k个。
public void quickSort(int[] arr,int low,int high){
int i,j,temp,t;
if(low>high){
return;
}
i=low;
j=high;
//temp就是基准位
temp = arr[low];
while (i<j) {
//先看右边,依次往左递减
while (temp<=arr[j]&&i<j) {
j--;
}
//再看左边,依次往右递增
while (temp>=arr[i]&&i<j) {
i++;
}
//如果满足条件则交换
if (i<j) {
t = arr[j];
arr[j] = arr[i];
arr[i] = t;
}
}
}
第二种方法:优先队列
public class KthLargestElement {
private static final int DEFAULT_INITIAL_CAPACITY = 11;
public int kthLargestElement(int k, int[] nums) {
// write your code here
//优先队列
int ret = 0;
PriorityQueue<Integer> priorityQueue = new PriorityQueue<>(DEFAULT_INITIAL_CAPACITY, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o2 - o1;
}
});
for (int i = 0; i < nums.length; i++) {
priorityQueue.add(nums[i]);
}
System.out.println("----------------");
for (int i = 0; i < k; i++) {
ret = priorityQueue.poll();
}
return ret;
}
}