• 网易2016 实习研发工程师 [编程题]寻找第K大 and leetcode 215. Kth Largest Element in an Array


    传送门

    有一个整数数组,请你根据快速排序的思路,找出数组中第K大的数。

    给定一个整数数组a,同时给定它的大小n和要找的K(K在1到n之间),请返回第K大的数,保证答案存在。

    测试样例:
    [1,3,5,2,2],5,3
    返回:2

    note:

    注意手写快排的时候:

            while(i < j) {
                while(j > i && a[j] > a[left]) j--;
                while(i < j && a[i] <= a[left]) i++;
                if(i < j) {
                    swap(a[i],a[j]);
                }
            }
    
    while(j > i && a[j] > a[left]) j--;
    while(i < j && a[i] <= a[left]) i++;
    
    这两个顺序不能反了,不然下标会错位一个
     1 class Finder {
     2 public:
     3     int findKth(vector<int> a, int n, int K) {
     4         // write code here
     5         return quickfind(a,0,n - 1,K);
     6     }
     7     
     8     int quickfind(vector<int> &a,int left,int right,int K) {
     9         int i = left,j = right;
    10         while(i < j) {
    11             while(j > i && a[j] > a[left]) j--;
    12             while(i < j && a[i] <= a[left]) i++;
    13             if(i < j) {
    14                 swap(a[i],a[j]);
    15             }
    16         }
    17         swap(a[left],a[i]);
    18         int dis = right - i + 1;
    19         if(dis == K){
    20             return a[i];
    21         }
    22         else if(K < dis) {
    23             return quickfind(a,i + 1,right,K);
    24         }
    25         else{
    26             return quickfind(a,left,i - 1 ,K - dis);
    27         }
    28     }
    29 };

    --------------------------------------------------

    leetcode:

    传送门

    215. Kth Largest Element in an Array

     
     My Submissions
     
    • Total Accepted: 67793
    • Total Submissions: 195182
    • Difficulty: Medium

    Find the kth largest element in an unsorted array. Note that it is the kth largest element in the sorted order, not the kth distinct element.

    For example,
    Given [3,2,1,5,6,4] and k = 2, return 5.

    Note: 
    You may assume k is always valid, 1 ≤ k ≤ array's length.

    Credits:
    Special thanks to @mithmatt for adding this problem and creating all test cases.

    Subscribe to see which companies asked this question

    Hide Tags
     Heap Divide and Conquer
    Show Similar Problems
     
     
     1 class Solution {
     2 public:
     3     int findKthLargest(vector<int>& nums, int k) {
     4         return quickfind(nums,0,nums.size() - 1,k);
     5     }
     6     
     7     int quickfind(vector<int> &a,int left,int right,int K) {
     8         int i = left,j = right;
     9         while(i < j) {
    10             while(j > i && a[j] > a[left]) j--;
    11             while(i < j && a[i] <= a[left]) i++;
    12             if(i < j) {
    13                 swap(a[i],a[j]);
    14             }
    15         }
    16         swap(a[left],a[i]);
    17         int dis = right - i + 1;
    18         if(dis == K){
    19             return a[i];
    20         }
    21         else if(K < dis) {
    22             return quickfind(a,i + 1,right,K);
    23         }
    24         else{
    25             return quickfind(a,left,i - 1 ,K - dis);
    26         }
    27     }
    28 };
  • 相关阅读:
    解决Select2控件不能在jQuery UI Dialog中不能搜索的bug
    Markdown编辑器入门
    使用Ubuntu 12.04作为日常电脑环境
    DIV元素水平和垂直居中
    xocodebulid 自动化打包 解决提示 ld: library not found for -lPods 问题
    IOS 项目的瘦身工具
    Core Animation系列之CADisplayLink
    IOS7 新特性
    objc中国 和 翻译团队博客 (不错的学习ios 资源)
    IOS6 IOS7 Mapkit draw Rout(地图划线)
  • 原文地址:https://www.cnblogs.com/njczy2010/p/5726634.html
Copyright © 2020-2023  润新知