寻找第K大

题目描述

有一个整数数组,请你根据快速排序的思路,找出数组中第K大的数。
给定一个整数数组a,同时给定它的大小n和要找的K(K在1到n之间),请返回第K大的数,保证答案存在。

思路解释

  • 代码:

    class Finder {
    public:
      int findKth(vector<int> a, int n, int K) {
          int res = 0, left = 0, right = n - 1;
          K = n - K;
          while(left <= right)
          {
              int i = QuickSort(a, left, right);
              if(i == K)
                  return  a[i];
              else if(i < K)
                  left = i + 1;
              else
                  right = i - 1;
          }
          return 0;
      }
    
      int QuickSort(vector<int>& a, int low, int high)
      {
          if(low == high)
              return low;
          int i = low, j = high, key = a[low];
          while(low < high)
          {
              while(low < high && a[high] >= key)
                  high--;
              a[low] = a[high];
              while(low < high && a[low] <= key)
                  low++;
              a[high] = a[low];
          }
          a[low] = key;
          return low;
      }
    };
全部评论

相关推荐

屌丝逆袭咸鱼计划:心态摆好,man,晚点找早点找到最后都是为了提升自己好进正职,努力提升自己才是最关键的😤难道说现在找不到找的太晚了就炸了可以鸡鸡了吗😤早实习晚实习不都是为了以后多积累,大四学长有的秋招进的也不妨碍有的春招进,人生就这样
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务