[LintCode] 第K大元素 Kth Largest Element
2016-04-26 15:57
357 查看
在数组中找到第k大的元素。
样例
给出数组 [9,3,2,4,8],第三大的元素是 4
给出数组 [1,2,3,4,5],第一大的元素是 5,第二大的元素是 4,第三大的元素是 3,以此类推
挑战
要求时间复杂度为O(n),空间复杂度为O(1)
Find K-th largest element in an array.
Example
In array [9,3,2,4,8], the 3rd largest element is 4.
In array [1,2,3,4,5], the 1st largest element is 5, 2nd largest element is 4, 3rd largest element is 3 and etc.
Challenge
O(n) time, O(1) extra memory.
时间复杂度O(nlogn)?
样例
给出数组 [9,3,2,4,8],第三大的元素是 4
给出数组 [1,2,3,4,5],第一大的元素是 5,第二大的元素是 4,第三大的元素是 3,以此类推
挑战
要求时间复杂度为O(n),空间复杂度为O(1)
Find K-th largest element in an array.
Example
In array [9,3,2,4,8], the 3rd largest element is 4.
In array [1,2,3,4,5], the 1st largest element is 5, 2nd largest element is 4, 3rd largest element is 3 and etc.
Challenge
O(n) time, O(1) extra memory.
时间复杂度O(nlogn)?
class Solution { /* * @param k : description of k * @param nums : array of nums * @return: description of return */ public int kthLargestElement(int k, int[] nums) { if(null == nums ||k <= 0 || nums.length < k) return Integer.MIN_VALUE; kthMax(nums, 0, nums.length-1, k); return nums[k-1]; } public void kthMax(int[] nums, int left, int right, int k) { int mid = partition(nums, left, right); if(mid == k-1) return; if(mid > k-1) kthMax(nums, left, mid-1, k); else kthMax(nums, mid+1, right, k); } public int partition(int[] nums, int left, int right) { int temp = nums[left]; while(left < right) { while(left < right && nums[right] <= temp) right--; nums[left] = nums[right]; while(left < right && nums[left] > temp) left++; nums[right] = nums[left]; } nums[left] = temp; return left; } };
相关文章推荐
- GetKeyState、GetAsyncKeyState、GetKeyboardState函数的区别 以及虚拟键值
- RAID级别与规范
- Command模式
- Centos7 系统下node.js+Nginx+MongoDB的安装与配置
- 文件管理 - 2
- CSS布局方式
- 剑指Offer--028-字符串的排列
- android BitmapFactroy
- selenium webdriver 学习总结-元素定位
- 介绍 GDB 调试 Go
- spark sql简单示例
- 个人常用iOS第三方库
- 迁移数据库的相关文件到存储中(目录不相同)
- Android实现发送短信的功能
- RecyclerView
- Android学习(45) -- 自定义控件(9) 下拉刷新 (添加footer)
- 查Postgresql 数据库、各表占用磁盘大小
- ABAP提示信息对话框
- 设计模式-策略模式
- 排序1,2......n的无序数组,时间复杂度为o(n),空间复杂度为o(1)