LeetCode 215 Kth Largest Element in an Array
2015-12-08 11:32
447 查看
题目描述
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.
Credits:
Special thanks to @mithmatt for adding this problem and creating all test cases.
分析
类似快排,能够达到O(n)的时间复杂度。代码
[code] public int findKthLargest(int[] nums, int k) { return findK(nums, nums.length - k, 0, nums.length - 1); } int findK(int[] nums, int k, int low, int high) { if (low >= high) { return nums[low]; } int p = partition(nums, low, high); if (p == k) { return nums[p]; } else if (p < k) { // 求第k大的,所以要反过来 return findK(nums, k, p + 1, high); } else { return findK(nums, k, low, p - 1); } } int partition(int[] nums, int low, int high) { int privotKey = nums[low]; while (low < high) { while (low < high && nums[high] >= privotKey) { high--; } swap(nums, low, high); while (low < high && nums[low] <= privotKey) { low++; } swap(nums, low, high); } return low; } private void swap(int[] nums, int low, int high) { int t = nums[low]; nums[low] = nums[high]; nums[high] = t; }
相关文章推荐
- iOS 使用collectionView实现无线轮播
- 如何走技术路线的研究生论文?
- Windows 上安装docker
- Excel公式不计算
- 函数的重载
- Java下载文件
- 堆/栈
- 强引用,软引用,弱引用,虚引用
- Android - 文件读写操作 总结
- Android:Layout_weight的深刻理解(转载于51CTO)
- Charles抓包监测和网络知识梳理
- 【Struts2】(7)ModelDriven和类型转换器
- SuperMap中动画模型制作详解
- ccf认证--201509-3
- 关于解决spring 只能跳转到.jsp 不能跳转到.html的问题
- 应用程序无法正常启动(0xc000007b)
- android(46)(光线传感器,方向传感器,杀死进程,退出应用,简单的webview,APK安装器)
- tableviewcell输入框键盘隐藏
- wget
- 转:JavaScript理解