zoukankan      html  css  js  c++  java
  • LeetCode Kth Largest Element in an Array (快速排序)

    题意:

      在一个无序的数组中第k大的数是多少?

    思路:

      按照快排的思路,如果每次分成两段后,设为L和R。如果R>=k ,则答案在右边集合,否则在左边集合。

      这里用了3位取中法。注意快排别给写死循环了。

     1 class Solution {
     2 public:
     3     int findKthLargest(vector<int>& nums, int k) {
     4         if(k>nums.size())    return 0;
     5            return DFS(nums,0,nums.size()-1,k);
     6     }
     7 
     8     int DFS(vector<int>& nums,int s,int e,int k)
     9     {
    10         int L=s, R=e;
    11         //三位取中法
    12         if(nums[e]>nums[s])    swap(nums[s],nums[e]);    
    13         if(nums[s]>nums[(s+e)/2])    swap(nums[s],nums[(s+e)/2]); 
    14 
    15         int mid=nums[s];
    16         while(L<R)
    17         {
    18             while(L<R && nums[R]>=mid)    R--;    //找小
    19             nums[L]=nums[R];
    20             while(L<R && nums[L]<=mid)    L++;    //找大
    21             nums[R]=nums[L];
    22         }
    23         nums[L]=mid;
    24         int len=e-L;//右边部分的元素个数
    25         if(len+1==k)    return mid;
    26         if(len>=k)    return DFS(nums,L+1,e,k);
    27         else        return DFS(nums,s,L-1,k-len-1);
    28     }
    29 };
    AC代码
  • 相关阅读:
    Windows 下搭建FTP服务器
    PHP的异常以及异常存在的意义
    IE兼容性
    YII插件
    PHPCMS部件
    YII学习笔记
    MAC下PHP开发
    iframe
    centos+apache+mod_ssl
    xcode快捷键
  • 原文地址:https://www.cnblogs.com/xcw0754/p/4973075.html
Copyright © 2011-2022 走看看