题解 | #寻找第K大#

寻找第K大

http://www.nowcoder.com/practice/e016ad9b7f0b45048c58a9f27ba618bf

import java.util.*;

public class Solution {
    public int findKth(int[] a, int n, int k) {
        // write code here
        return findKth(a, 0, n - 1, n - k + 1);
    }

    public int findKth(int[] a, int start, int end, int k){
        if(start >= end) return a[start];

        int left = start - 1, right = end + 1, mid = a[left + (right - left)/2];
        while(left < right){
            do left++; while(mid > a[left]);
            do right--; while(mid < a[right]);

            if(left < right){swap(a, left, right);}
            else break;
        }
        if(right >= k-1){ return findKth(a,start,right,k);}//因为第k大对应下标为k-1}
        else {return findKth(a, right + 1, end, k);}
    }

    public static void swap(int[] q, int p1, int p2){
        int temp = q[p1];
        q[p1] = q[p2];
        q[p2] = temp;
    }
}
全部评论

相关推荐

07-07 11:33
江南大学 Java
已经在暑假实习了&nbsp;,没有明确说有hc,纠结实习到八月份会不会有点影响秋招毕竟感觉今年好多提前批
程序员小白条:92的话准备提前批,其他没必要,没面试机会的,而且你要准备充分,尤其八股和算法题
点赞 评论 收藏
分享
05-29 22:11
门头沟学院 Java
Elastic90:抛开学历造假不谈,这公司的招聘需求也挺怪的,Java开发还要求你有图文识别、移动端开发和c++的经验,有点逆天了。
点赞 评论 收藏
分享
这是什么操作什么意思,这公司我服了...
斯派克spark:意思是有比你更便宜的牛马了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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