求数组第K大
来源:互联网 发布:软件开发的课程 编辑:程序博客网 时间:2024/04/30 13:25
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.
Subscribe to see which companies asked this question
class Solution{public: int findKthLargest(vector<int>& nums, int k) { int ans= selectk(nums,0,nums.size()-1,k); return nums[ans]; } int selectk(vector<int>& a, int low, int high, int k) { if(k <= 0) return -1; if(k > high - low + 1) return -1; int pivot = low + rand()%(high - low + 1); //随即选择一个支点 swap(a[low], a[pivot]); int m = low; int count = 1; //一趟遍历,把较大的数放到数组的左边 for(int i = low + 1; i <= high; ++i) { if(a[i] > a[low]) { swap(a[++m], a[i]); count++; //比支点大的数的个数为count-1 } } swap(a[m], a[low]); //将支点放在左、右两部分的分界处 if(count > k) { return selectk(a, low, m - 1, k); } else if( count < k) { return selectk(a, m + 1, high, k - count); } else { return m; } }};
0 0
- 求数组第K大
- 树状数组求第k大值
- 无序数组求第K大
- 求数组第K大的数
- 求第k大
- 求两个排序数组的第K大元素--求全排列的第K大元素
- 二分求两个有序数组第k大的数
- 树状数组 求第K大的数 Swun1012
- 求无序数组第K大的数
- 求数组中第k大的数
- 求两个数组中第k大的数
- hdu 5249 树状数组求第K大
- 求数组中第K大的数
- Poj 2985 树状数组求第k大
- hdu 5249 KPI 离线+树状数组求第k大
- 求一个数组中第k大的数
- 随机算法求数组中第k大的
- 求数组中第k大的数的位置
- LINQ体验(3)——C# 3.0新语言特性和改进(下篇)
- 基于 Nginx 的软件负载均衡实现解读
- 来自优达学城毕业生和导师的学习建议
- 获取当前设置的版本
- 四种php常用排序算法
- 求数组第K大
- 【寒江雪】顶点缓存与HLSL
- 获取选择集、选择集颜色设置
- libsvm最新源代码(版本3.21)理解解析(二)
- 一步一步,从零开始开发asp.net
- 屏幕密度
- UBuntu 16.04.01 LTS Chromium 安装pepperflash
- android的一些小知识点
- 磁盘配额