Sword to Offer-40 最小的 K 个数 ❀

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

解题思路:

冒泡排序,外循环设为k次即可得到最小的k个值,相邻的两个值比较,将最小的值往右冒泡至无序部分的最后一个位置,每次外循环将冒泡上去的那个数添加到用于返回的链表中。

问题图解:

AC代码:

// Find the k Minimum Numbers in Array (Bubble Sort)

import java.util.ArrayList;

public class Solution {
    public ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) {
        ArrayList<Integer> res = new ArrayList<>();
        if (input == null || k<=0 || k>input.length) {
            return res;
        }
        for (int i=0; i<k; i++) {
            for (int j=0; j<input.length-i-1; j++) {
                if (input[j] < input[j+1]) {
                    int tmp = input[j];
                    input[j] = input[j+1];
                    input[j+1] = tmp;
                }
            }
            res.add(input[input.length-i-1]);
        }
        return res;
    }
}

补充说明:

Comments


yangzail © 2020. All rights reserved.

Powered by Hydejack v8.5.2