215. Kth Largest Element in an Array
2016-04-19 17:00
337 查看
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
Note:
You may assume k is always valid, 1 ≤ k ≤ array's length.
思路:借用快排中的partition的思想
代码如下(已通过leetcode)
public class Solution {
public int findKthLargest(int[] nums, int k) {
int position=findKthLargest(nums, 0, nums.length-1, k);
return nums[position];
}
public int findKthLargest(int[] nums,int start,int end, int k) {
int n = nums.length;
int position=partition(nums, start,end);
if(position==n-k) return position;
else{
if(position<n-k) return findKthLargest(nums, position+1,end,k);
else return findKthLargest(nums, start, position-1, k);
}
}
private int partition(int[] nums, int low, int high) {
// TODO Auto-generated method stub
int i=low,j=high;
int key=nums[low];
while(i<j) {
while(nums[j]>=key&&j>i) {
j--;
}
int temp=nums[i];
nums[i]=nums[j];
nums[j]=temp;
while(nums[i]<=key&&i<j) {
i++;
}
temp=nums[i];
nums[i]=nums[j];
nums[j]=temp;
}
return i;
}
}
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.
思路:借用快排中的partition的思想
代码如下(已通过leetcode)
public class Solution {
public int findKthLargest(int[] nums, int k) {
int position=findKthLargest(nums, 0, nums.length-1, k);
return nums[position];
}
public int findKthLargest(int[] nums,int start,int end, int k) {
int n = nums.length;
int position=partition(nums, start,end);
if(position==n-k) return position;
else{
if(position<n-k) return findKthLargest(nums, position+1,end,k);
else return findKthLargest(nums, start, position-1, k);
}
}
private int partition(int[] nums, int low, int high) {
// TODO Auto-generated method stub
int i=low,j=high;
int key=nums[low];
while(i<j) {
while(nums[j]>=key&&j>i) {
j--;
}
int temp=nums[i];
nums[i]=nums[j];
nums[j]=temp;
while(nums[i]<=key&&i<j) {
i++;
}
temp=nums[i];
nums[i]=nums[j];
nums[j]=temp;
}
return i;
}
}
相关文章推荐
- float元素浮动后高度不一致导致错位的解决办方法
- 类目和延展的作用和区别?
- ApachePOI导出exce,设置单元格风格的属性和设置字体风格的属性的两个工具类,POI宽度和excel 像素转换
- 总结一下java中的位操作,运算优先级
- MTK之UART串口收发数据
- 模仿支付宝GridView 分割线实现
- 3D Touch
- SignalR 资料
- C语言易错和易忽视点
- MFC/WTL 设置背景图和控件透明的方法
- 一、svn--windows下安装
- javascript去除字符串左右两端的空格
- IM/即时通讯
- zzuli oj 1873: This offer 【dfs+数组标记技巧(set会超时)】
- Java 将15位身份证号转化为18位返回,非15位身份证号原值返回
- python @ property classmethod staticmethod
- Sublime Text 2 实用快捷键(Mac OS X)
- (转载)C#中使用GUID
- 平衡二叉树旋转
- Android广播BroadcastReceiver