剑30-最小的K个数

来源:互联网 发布:现金赌博软件手机软件 编辑:程序博客网 时间:2024/06/07 18:02

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

import java.util.ArrayList;import java.util.Arrays;public class Solution {    public ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k)    {         ArrayList<Integer>al=new ArrayList<>();        //判断特例        if(k>input.length||k<=0)            return al;        //开辟新数组存放input前k个值        int[]ints=new int[k];        for(int i=0;i<k;i++)        {            ints[i]=inputs[i];        }        //对有k个值的新数组进行排序,则最大值是ints[k-1]        Arrays.sort(ints);        //比较最大值ints[k-1]和input数组中剩下的值大小,比最大值小就插入,        for(int i=k;i<input.length;i++)        {            if(input[i]<ints[k-1])                insertInts(ints,input[i]);        }        //将ints数组添加到新的ArrayList集合中并返回        for(int i=0;i<k;i++)        {            al.add(ints[i]);        }        return al;    }    //插入函数,从最后面进行比较,比较的同时移位,将值插进去,当找到第一个比他小的就查到后面,    //实现重排序,保证将m插入到合适位置,    public void insertInts(int[]ints,int m)    {        int i=ints.length-1;        for(;i>=0;i--)        {            if(ints[i]<m)                break;            if(i==0)            {                i=-1;                break;            }            ints[i]=ints[i-1];//移位操作        }        //直到找到第一个比m小的,break跳出循环,就插到后面        ints[i+1]=m;    }}