Kth Largest Element in an Array LeetCode Java
2015-06-23 15:58
555 查看
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.
刚看这道题目的时候, 首先想法是使用构造大根堆的方式实现。本来想在讨论区参考一下具体做法,但是看了一下讨论区的内容,才恍然大悟,java的priorityQueue不就是通过堆来实现的吗?直接用就好了。。。。
同时,在讨论区看到了一个多个解法的帖子,感觉写的挺不错的,就转过来了(原地址:https://leetcode.com/discuss/36966/solution-explained):
方法一
排序法
方法二
priorityQueue
方法三
使用选择算法,其实就是快排用到的思路
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.
刚看这道题目的时候, 首先想法是使用构造大根堆的方式实现。本来想在讨论区参考一下具体做法,但是看了一下讨论区的内容,才恍然大悟,java的priorityQueue不就是通过堆来实现的吗?直接用就好了。。。。
同时,在讨论区看到了一个多个解法的帖子,感觉写的挺不错的,就转过来了(原地址:https://leetcode.com/discuss/36966/solution-explained):
方法一
排序法
public int findKthLargest(int[] nums, int k) { final int N = nums.length; Arrays.sort(nums); return nums[N - k]; }
方法二
priorityQueue
public int findKthLargest(int[] nums, int k) { PriorityQueue<Integer> priorityQueue=new PriorityQueue<Integer>(); for(int i:nums){ priorityQueue.add(i); if(priorityQueue.size()>k){ priorityQueue.poll(); } } return priorityQueue.poll(); }
方法三
使用选择算法,其实就是快排用到的思路
public int findKthLargest2(int[] nums,int k){ k=nums.length-k; int lo=0; int hi=nums.length-1; while(lo<hi){ final int j=partition(nums, lo, hi); if(j<k){ lo=j+1; }else if(j>k){ hi=j-1; }else { break; } } return nums[k]; } private int partition(int[] a,int lo,int hi){ int i=lo; int j=hi+1; while(true){ while(i<hi && less(a[++i], a[lo])); while(j>lo && less(a[lo], a[--j])); if(i>=j) break; exch(a, i, j); } exch(a, lo, j); return j; } private void exch(int[] a,int i,int j){ final int tmp=a[i]; a[i]=a[j]; a[j]=a[i]; } private boolean less(int v,int w){ return v<w; }
相关文章推荐
- myeclipse2013/2015更新ADT-please update ADT to the latest version
- java为什么不支持多继承
- 详解Java解析XML的四种方法
- java中File目录的管理(二)local()与walk()方法
- eclipse怎么设置字体大小
- java类的多态性
- spring util命名空间
- JAVA部分关键字分析
- java 集合篇
- java关键字及分类
- java 三次样条插值 画光滑曲线 例子
- 关于ActionContext.getContext()的用法心得
- java 排序
- 设置按钮的位置
- java加载class文件(类加载机制)
- 怎么解决java.lang.NoClassDefFoundError错误
- 安装 Struts2 在 RHEL x64
- 安装Eclipse 在 RHEL5 x64
- 20Spring切面的优先级
- 安装 JDK 1.6 在 RHEL x64