215. Kth Largest Element in an Array
Find the kth largest element in an unsorted array. Note that it is the kth largest element in the sorted order, not the kth distinct element.
Example 1:
Input: [3,2,1,5,6,4] and k = 2
Output: 5
Example 2:
Input: [3,2,3,1,2,4,5,5,6] and k = 4
Output: 4
现在leetcode没有时间结果排序了,很难受
1、冒泡排序,太慢了
class Solution {
public int findKthLargest(int[] nums, int k) {
for(int i=0;i<k;i++){
for(int j=0;j<nums.length-i-1;j++){
if(nums[j]>nums[j+1])
swap(nums,j+1,j);
}
}
return nums[nums.length-k];
}
public void swap(int[] nums,int i,int j){
int tmp=nums[i];
nums[i]=nums[j];
nums[j]=tmp;
}
}
2、快速排序
class Solution {
public int findKthLargest(int[] nums, int k) {
int cmp=quicksort(nums,0,nums.length-1);
k=nums.length-k;
while(cmp!=k){
if(cmp>k){
cmp=quicksort(nums,0,cmp-1);
}else{
cmp=quicksort(nums,cmp+1,nums.length-1);
}
}
return nums[cmp];
}
public int quicksort(int[] nums,int i,int j){
int val=nums[i];
while(i!=j){
while(i<j&&nums[j]>=val)j--;
if(i==j)break;
swap(nums,i,j);
while(i<j&&nums[i]<=val)i++;
if(i==j)break;
swap(nums,i,j);
}
return i;
}
public void swap(int[] nums,int i,int j){
int tmp=nums[i];
nums[i]=nums[j];
nums[j]=tmp;
}
}
3、堆排序,这个是最快的
class Solution {
public int findKthLargest(int[] nums, int k) {
PriorityQueue<Integer> heap=new PriorityQueue<Integer>();
for(int n:nums){
heap.add(n);
if(heap.size()>k)
heap.poll();
}
return heap.poll();
}
}