输入
[4,5,1,6,2,7,3,8],4
输出
1,2,3,4
这道题我有两种解法。
1,先给传入的数组排序,拿出其中前4位就行了
2,找数组里面的最小值,找到一个就拿出来,然后把最小值变成最大值,再次找最小值,找4次就行了。
第一种:
public static ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) {
ArrayList<Integer> arr=new ArrayList();
//先排序,把最小的k个数放入;可以冒泡,冒泡出最小的k个就结束了
if(k==0 || k>input.length)
return arr;
for(int i=0;i<input.length && i<k;i++)//当i=k说明有i个元素冒泡了
{
for(int j=1;j<input.length-i;j++)
{
if(input[j-1]<input[j])
{
int tmp=input[j];
input[j]=input[j-1];
input[j-1]=tmp;
}
}
}
//把冒泡出来的k个元素放在集合里面
for(int i=input.length-1;i>=0 && k>0;k--,i--)
{
arr.add(input[i]);
}
return arr;
}
第二种:在数组内部找最小值,找到一次就添加一次,,然后把最小值变最大值,这样就不影响下次寻找最小值了,添加4次就行了
public static ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) {
ArrayList<Integer> arr=new ArrayList();
//找最小值,找到就放到集合,
if(k==0 || k>input.length)
return arr;
//找到最大值
int max=input[0];
for(int i=0;i<input.length;i++)
{
if(max<input[i])
{
max=input[i];
}
}
//多次找最小值,只需要找k次就好了
for(int j=0;j<k;j++)
{
int min=max;
int tmp=-1;
for(int i=0;i<input.length;i++)
{
if(min>=input[i])
{
min=input[i];
tmp=i;
}
}
arr.add(min);//把找到的最小值放集合
// if(tmp!=-1)
input[tmp]=max;//把最小值变成最大值
}
System.out.println(arr);
return arr;
}