题解 | #最小的K个数#

最小的K个数

http://www.nowcoder.com/practice/6a296eb82cf844ca8539b57c23e6e9bf

记录

import java.util.*;

public class Solution {
    Random random = new Random();
    public ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) {
        ArrayList<Integer> list1 = new ArrayList<Integer>();
        if (k == 0 || k > input.length) {
            return list1;
        }
        int left = 0;
        int right = input.length - 1;
        int k1 = k - 1;
        while (true){
            int temp = quicksort(input, left, right);
            if (temp == k1){
                for (int i = 0; i < k; i++){
                    list1.add(input[i]);
                }
                return list1;
            } else if (temp < k1){
                left = temp + 1;
            } else {
                right = temp - 1;
            }
        }

    }
    public int quicksort(int[] input, int left, int right){
        if (right > left){
            int index = left + 1 + random.nextInt(right - left);
            swap(input, index, left);
        }
        int j = left;
        int privot = input[left];
        for (int i = left + 1; i <= right; i++){
            if (input[i] < privot){
                j++;
                swap(input, i, j);
            }
        }
        swap(input, left, j);
        return j;
    }
    public void swap(int[] input, int i, int j){
        int temp = input[i];
        input[i] = input[j];
        input[j] = temp;
    }
}
全部评论

相关推荐

昨天 15:09
武汉大学 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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