lintcode5-5. 第k大元素
来源:互联网 发布:手机开淘宝店怎么装修 编辑:程序博客网 时间:2024/05/22 17:47
在数组中找到第k大的元素
注意事项
你可以交换数组中的元素的位置
样例
给出数组 [9,3,2,4,8]
,第三大的元素是 4
给出数组 [1,2,3,4,5]
,第一大的元素是 5
,第二大的元素是 4
,第三大的元素是 3
,以此类推
挑战
要求时间复杂度为O(n),空间复杂度为O(1)
思想利用分治法进行处理:使用快速排序,和快速排序不同的是每次分为两个部分时仅需要考虑其中一个部分,这样就会使得时间复杂度由O(nlogn)降为O(n),这里我并没有使用迭代的写法,因为使用迭代时,数据量很大时内存会不够用。
class Solution {public: /* * @param n: An integer * @param nums: An array * @return: the Kth largest element */ //快速排序 int quickSort(vector<int> &nums,int begin,int end){ int key=nums[begin]; int first=begin,last=end; while(first<last){ while(nums[last]>=key&&first<last){ last--; } nums[first]=nums[last]; while(nums[first]<=key&&first<last){ first++; } nums[last]=nums[first]; } nums[first]=key; return first; } int kthLargestElement(int n, vector<int> &nums) { // write your code here int length=nums.size(); int begin=0,end=length-1; int flag1=quickSort(nums,begin,end); while(1){ for(int i=0;i<length;i++) cout<<nums[i]<<" "; cout<<endl; if(length-flag1>n){ begin=flag1+1; flag1=quickSort(nums,begin,end); } else if(length-flag1<n){ end=flag1-1; flag1=quickSort(nums,begin,end); } else break; } for(int i=0;i<length;i++) cout<<nums[i]<<" "; return nums[length-n]; }};
阅读全文
0 0
- lintcode5-5. 第k大元素
- 第k大元素
- 第k大元素
- 第k大元素
- [LintCode]5.第k大元素
- Lintcode 5. 第k大元素
- LintCode 第K大元素
- LintCode-第k大元素
- LintCode_第k大元素
- 【LintCode】第k大元素
- 查找第K大元素
- 第k大的元素
- 快排应用-第k大元素
- 查找数组中第K大元素
- 查找--第K大的元素
- 线性时间查找第k大元素
- 查找第K大的元素
- 数组中的第K大元素
- YOLO——保存处理后的视频到本地
- 一文快速掌握 Git 用法
- [mongoDB]CentOS系统yum安装与配置mongoDB3.4
- 跳转UIImagePickerController崩溃原因
- iSO获取两个日期之间的所有日期数组,精确到天
- lintcode5-5. 第k大元素
- SwipeRefreshLayout详解和自定义上拉加载更多
- AnalyticDB(原ADS)分区列的最佳实践
- Tomcat启动了但是浏览器中访问不了,也没有8080的进程
- 页面重绘与重排
- Android频道管理
- centos7上装lnmp总结
- startActivityForResult请求的REQUEST_CODE和返回的REQUEST_CODE不一致问题
- 12.15笔记