题解 | #整数无序数组求第K大数#

整数无序数组求第K大数

http://www.nowcoder.com/practice/097ab63cffa847d89716f2ca8c23524f

import java.util.Comparator;
import java.util.PriorityQueue;
import  java.util.Scanner;

import java.util.*;
public class Main {
    static int result = 0;
    static int n;
    static int[] res;

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String temp=in.nextLine();
        String[]res= temp.trim().split(" ");
        int []arr=new int[res.length];
        for(int i=0;i<res.length;i++){
            arr[i]=Integer.parseInt(res[i].trim());
        }

        int k=arr.length-in.nextInt();

        int flag=helper(arr,0,res.length-1);
        while(flag!=k){

            if(flag>k){
                flag=helper(arr,0,flag-1);
            }
            else flag=helper(arr,flag+1,res.length-1);
        }
        System.out.println(arr[k]);

    }

    static int helper(int []arr,int left,int right){
        if(left>=right)return left;
        int left_before=left;
        int pivot=arr[left];
        while(left<right){
            while(left<right&&arr[right]>=pivot)right--;
            while(left<right&&arr[left]<=pivot)left++;
            if(left<right){
                int temp=arr[left];
                arr[left]=arr[right];
                arr[right]=temp;
            }
        }

        arr[left_before]=arr[left];
        arr[left]=pivot;

        return left;

    }
}

全部评论

相关推荐

10-07 23:57
已编辑
电子科技大学 Java
八街九陌:博士?客户端?开发?啊?
点赞 评论 收藏
分享
菜菜咪:1. 可以使用简历网站的模版,美观度会更好一点 2. 邮箱可以重新申请一个,或者用qq邮箱的别名,部分hr可能会不喜欢数字邮箱 3. 项目经历最好分点描述,类似的项目很多,可以参考一下别人怎么写的 4. 自我评价可加可不加,技术岗更看重技术。最后,加油,优秀士兵
点赞 评论 收藏
分享
评论
点赞
1
分享
牛客网
牛客企业服务