zoukankan      html  css  js  c++  java
  • 215. 数组中的第K个最大元素

    在未排序的数组中找到第 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排序来找,堆排序不是很熟悉,以后再做

    有疑惑或者更好的解决方法的朋友,可以联系我,大家一起探讨。qq:1546431565
  • 相关阅读:
    所谓的小项目
    PHP开发者常犯的10个MySQL错误
    这是掌握cookie最后的一个障碍
    Lua学习笔记(2)——table
    Corona Enterprise 引入第三方 jar 包
    Lua学习笔记(1)
    SQL分页查询笔记
    三两句记录设计模式(1)——简单工厂模式
    Window + Net + Corona + IOS PUSH
    IoC学习
  • 原文地址:https://www.cnblogs.com/mr-stn/p/9201693.html
Copyright © 2011-2022 走看看