zoukankan      html  css  js  c++  java
  • DC-leetcode215数组中的第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 ≤ 数组的长度。

    分析:这种问题老师讲了很多解法,一步比一步的效率要好,这里我用了基于划分的方法,类似于快排。

    class Solution {
    public:
        //根据第一个元素划分位置
        int partition(vector<int>&nums,int low,int high){
            int temp=nums[low];
            int p=nums[low];
            while(low<high){
                          
                     while(low<high&&nums[high]<=temp)high--;
                     nums[low]=nums[high];
                    
                     while(low<high&&nums[low]>=temp)low++;
                     nums[high]=nums[low];
                     
                }
                nums[low]=temp;
                return low;
            
               
                   
            
        }
        int findKthLargest(vector<int>& nums, int k) {
          int begin=0,end=nums.size()-1;
          //如果把数据从大到小排序的话,第k大元素就是第k-1位置的元素。
          //当k-1<position的话,就去划分位置的左边去找;如果k-1>position的话去划分位置的右边去找;相等的话直接返回。
                 while(1){
                int position=partition(nums,begin,end);
                if(k-1==position)return nums[position];
                else if(k-1<position) end=position-1;
                else begin=position+1;
            }
        }
    };
  • 相关阅读:
    安装RabbitMQ说明
    死锁
    管程
    MybatisPlus快速开发
    了解Mybatis-Plus
    查看监听器状态
    The command supports no service 解决办法
    任务11 Arduino光照报警器
    任务10 测试光的强度实验
    任务9 Arduino光敏实验
  • 原文地址:https://www.cnblogs.com/zfc888/p/10172336.html
Copyright © 2011-2022 走看看