码迷,mamicode.com
首页 > 编程语言 > 详细

215. 数组中的第K个最大元素

时间:2018-06-20 00:02:10      阅读:304      评论:0      收藏:0      [点我收藏+]

标签:数据   取出   不同   ==   IV   --   数组   位置   数组排序   

在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。

示例 1:

输入: [3,2,1,5,6,4] 和 k = 2
输出: 5

示例 2:

输入: [3,2,3,1,2,4,5,5,6] 和 k = 4
输出: 4

说明:

你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度。

 

最粗暴的方式是对所有的数据排序,然后取出第k个数;但是对进行很多不必要的排序;

这里用快速排序,和二分的思想来找第k大的数据;

以第一个数为pivot,找到该数在有序序列中的位置, 如果该数的位置在k的左边,就在该数的右边继续查找, 如果该数在k的右边, 就在该数的左边继续查找

 1 class Solution {
 2 public:
 3     int partition(vector<int>& num, int low, int high){
 4         int pivot = num[low];
 5         while(low<high){
 6             while(low<high && num[high]<=pivot) --high;
 7             swap(num[low], num[high]);
 8             while(low<high && num[low]>=pivot) ++low;
 9             swap(num[low], num[high]);
10         }
11         return low;
12     }
13     int findKthLargest(vector<int>& nums, int k) {
14         int l=0, r=nums.size()-1;
15        while(true){
16            int pos=partition(nums, l, r);
17            if(pos>k-1) r=pos-1;
18            if(pos<k-1) l=pos+1;
19            if(pos==k-1) return nums[k-1];
20        }
21     }
22 };

 

还能用heap排序来找,堆排序不是很熟悉,以后再做

215. 数组中的第K个最大元素

标签:数据   取出   不同   ==   IV   --   数组   位置   数组排序   

原文地址:https://www.cnblogs.com/mr-stn/p/9201693.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!