您的位置:首页 > 其它

字符串算法——查找数组第K个最大值( Kth Largest Element in an Array)

2017-10-14 09:47 489 查看
问题:

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.

For example,

Given [3,2,1,5,6,4] and k = 2, return 5.

Note:

You may assume k is always valid, 1 ≤ k ≤ array’s length.

思路一:最简单粗暴就是对数组进行排序,然后就可以找到第K大的值,例如采用快速排序

class Solution {
public int findKthLargest(int[] nums, int k) {
//快速排序
int len = nums.length;
dfs(nums,0,len-1);
return nums[len-k];
}
public void dfs(int []nums,int start,int end){
if(start<end){
int i = start;
int j = end;
int key = nums[start];
while(i<j){
while(j>i && nums[j]>key)j--;
if(i<j){
swap(nums,i,j);
}
while(i<j && nums[++i]<key);
if(i<j){
swap(nums,i,j);
}
}
dfs(nums,start,i-1);
dfs(nums,j+1,end);
}
}
public void swap(int[]nums,int i,int j){
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
}


思路二:直接采用优先队列的方法,优先队列默认建立小顶堆

class Solution {
public int findKthLargest(int[] nums, int k) {
PriorityQueue<Integer> queue = new PriorityQueue<>();//创建优先队列
for(int i = 0;i<nums.length;i++){
queue.offer(nums[i]);//入队操作
if(queue.size()>k)queue.poll();//判断队列长度是否大于K
}
return queue.poll();//返回第K个最大值
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息