Leetcode.215 c++归并排序,看这一个题就够了!

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

在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。
示例 1:
输入: [3,2,1,5,6,4] 和 k = 2
输出: 5
利用归并排序的思想:例如输入[1,2,7,5,8,9]:


图示

具体代码如下:

class Solution {
public:
    int findKthLargest(vector<int>& nums, int k) {
        change_list(nums,0,nums.size()-1);
        return nums[k-1];
    }
private:
    void change_list(vector<int>& nums,int l,int r){
        if(l==r) return;
        int m = (l+r)/2;
        change_list(nums,l,m);
        change_list(nums,m+1,r);
        int lr=l,rr=m+1;
        vector<int> tmp;
        while(lr<=m && rr<=r){
            if(nums[lr]>=nums[rr]){
                tmp.push_back(nums[lr]);
                lr++;
            }
            else{
                tmp.push_back(nums[rr]);
                rr++;
            }
        }
        while(lr<=m){
                tmp.push_back(nums[lr]);
                lr++;
        }

        while(rr<=r){
                tmp.push_back(nums[rr]);
                rr++;
        }
        for(int i=l;i<=r;i++) nums[i]=tmp[i-l];
        return;
    }
};
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 早起(每天6点之前起床) 健身(练出马甲线) 陪伴孩子养成早起早睡的习惯 养成朗读 每周朗读50分钟 每周上两节古...
    lan小丫阅读 157评论 0 0
  • 目前,网络的知识太多,各种付费知识吸引我们的眼球,感觉每个文案写的超级棒,都忍不住剁手想去买。目前我们已经处于信息...
    喜乐妈妈阅读 503评论 0 0
  • 2018年2月24日 今天孩子给给我做了几个好吃的美食。 真的是发自内心的感动,感觉女儿突然间就长大了,知道体谅...
    简单就好_7471阅读 134评论 0 0
  • 人说桃花只开三月三。 就如同人一般,人的青春就如同这12个月中的三月三一般,如此短暂。 “想你了,想你了。去...
    九氓阅读 251评论 0 1