美文网首页
最小的K个数

最小的K个数

作者: 柳仁儿 | 来源:发表于2017-09-18 11:15 被阅读0次

import java.util.Scanner;

public class GetLestNumbers {

// 判断数组是否为空
public static boolean checkInvalidArray(int[] numbers) {
    if (numbers == null || numbers.length == 0)
        return true;
    return false;
}

// 基于快速排序算法的partition函数
public static int partition(int[] numbers, int left, int right) {
    int result = numbers[left];
    if (left > right) {
        return -1;
    }
    while (left < right) {
        while (left < right && numbers[right] >= result) {
            right--;
        }
        numbers[left] = numbers[right];
        while (left < right && numbers[left] < result) {
            left++;
        }
        numbers[right] = numbers[left];
    }
    numbers[left] = result;
    return left;
}

// 基于Partition函数的O(n)算法
public static int[] getLestNumbersK(int[] numbers, int k) {
    int[] results = new int[k];
    if (checkInvalidArray(numbers))
        return null;
    int length = numbers.length;
    int start = 0;
    int end = length - 1;
    int index = partition(numbers, start, end);
    while (index != k - 1) {
        if (index > k - 1) {
            end = index - 1;
            index = partition(numbers, start, end);
        } else {
            start = index + 1;
            index = partition(numbers, start, end);
        }

    }
    for (int i = 0; i < k; i++) {
        results[i] = numbers[i];
    }
    return results;
}

public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    String string = input.nextLine();
    int k = input.nextInt();
    String[] inputnum = string.split(" ");
    int[] numbers = new int[inputnum.length];
    for (int i = 0; i < numbers.length; i++) {
        numbers[i] = Integer.parseInt(inputnum[i]);
    }       
    for (int number : getLestNumbersK(numbers, k)) {
        System.out.print(number + " ");
    }
}

}

相关文章

  • 算法-数组(三)

    最小的k个数 求子数组的最大和 把数组排成最小的数字 1.最小的k个数 问题描述:输入n个数字,找到数组中最小的k...

  • 最小的k个数

    问题描述:输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是...

  • 最小的k个数

    输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3...

  • 最小的K个数

    题目描述输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1...

  • 最小的k个数

    参考: [1] https://www.nowcoder.com/questionTerminal/6a296eb...

  • 最小的K个数

    输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。

  • 最小的K个数

    题目描述 输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是...

  • 最小的k个数

    问题:输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,...

  • 最小的k个数

    题目描述输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1...

  • 最小的K个数

    import java.util.Scanner; public class GetLestNumbers { }

网友评论

      本文标题:最小的K个数

      本文链接:https://www.haomeiwen.com/subject/nfnvsxtx.html