数组-Kth Largest Element in an Array(找出第K大的数)
2016-06-04 14:49
519 查看
题目描述;
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大的数,那就是第N-k+1小的数了,采用快速排序,时间复杂程度为O(nlogN)代码:
public class Solution { public static int findKthLargest(int[] nums, int k) { int n = nums.length; int site = n - k + 1; if(n == 0){ return 0; } return find(nums, site - 1, 0, n - 1); } public static int find(int[] nums, int site, int left, int right){ int res = 0; if(left <= right){ int base = nums[left]; int l = left; int r = right; while(l < r){ while(nums[r] >= base && l < r){ r--; } if(l < r){ nums[l] = nums[r]; l++; } while(nums[l] <= base && l < r){ l++; } if(l < r){ nums[r] = nums[l]; r--; } } nums[r] = base; if(r == site){ res = base; } else if(r> site){ int left1 = left; int right1 = r -1; res = find(nums, site, left1, right1); } else{ int left2 = r + 1; int right2 = right; res = find(nums, site, left2, right2); } } return res; } }
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序