LeetCode Kth Largest Element in an Array
2015-10-29 01:07
357 查看
原题链接在这里:https://leetcode.com/problems/kth-largest-element-in-an-array/
采用quickSelect 算法,找第k大等于找第num.length + 1 - k小,这里k是从0开始所以就是 找num.length-k小。
findK就是找第k小函数,k从0开始。递归终止条件是 start>=end, 此时返回nums[start].
Time Complexity: O(n), Space O(1).
AC Java:
采用quickSelect 算法,找第k大等于找第num.length + 1 - k小,这里k是从0开始所以就是 找num.length-k小。
findK就是找第k小函数,k从0开始。递归终止条件是 start>=end, 此时返回nums[start].
Time Complexity: O(n), Space O(1).
AC Java:
public class Solution { public int findKthLargest(int[] nums, int k) { //QuickSelect return findK(nums, nums.length-k, 0, nums.length-1); } //findK 找第k小,k从0开始 private int findK(int[] nums, int k, int start, int end){ if(start >= end){ return nums[start]; } int m = partition(nums, start, end); if(m == k){ return nums[m]; }else if(m < k){ return findK(nums, k, m+1, end); }else{ return findK(nums, k, start, m-1); } } private int partition(int[] nums, int start, int end){ int pivot = nums[start]; int m = start; int n = start + 1; while(n<=end){ if(nums < pivot){ //Here is ++m, not m++, it move m first and then swap //e.g [3,2,1], pivot is 3, m = 0, n = 1. //nums < nums[m], swap nums[++m] and nums , that is swap 2 with 2 swap(nums, ++m, n); } n++; } swap(nums,start,m); return m; } private void swap(int[] nums, int i, int j){ int temp = nums[i]; nums[i] = nums[j]; nums[j] = temp; } }
相关文章推荐
- Material Design 实现之属性动画
- 猜数字游戏
- Unity3DAssetBundle的坑
- POJ 3616 Milking Time
- 【数据库】SQL查询多条不重复记录值简要解析
- C++:IO缓冲区
- POJ 3616 Milking Time
- 编程笑脸迷宫
- Missing Number
- 基于Hash算法的Mysql分表处理
- JDBC-预编译原理
- 算法导论14.3区间树 练习总结
- REGEX.C GNU 提取过滤数据
- 客户端脱域,失去信任关系排查办法
- 基于Smack4.1.4+ Openfire3.10.2下学习开发IM(一)实现用户登录、修改密码和注销等
- HDU 2859 Phalanx
- 线段树查询 II
- HDU 2859 Phalanx
- 给信息安全专业学生的书单
- spark学习系列