我有一个数组 int[] a= {5,3,1,2} 并且我想创建一个方法来挑选“k”个最小数字并返回一个按升序排列的具有 k 个最小整数的数组。但是当我运行这段代码时,我得到了输出:[1,3]。我知道代码以某种方式跳过了一些数字,但我无法扭曲我的大脑来修复它。有任何想法吗?
编辑:不对原始数组进行排序。
public static int[] nrSmallest(int[] a, int k) {
if(k <1 || k>a.length)
throw new IllegalArgumentException("must be at least 1");
int[] values= Arrays.copyOf(a, k);
Arrays.sort(values);
int counter= 0;
for(int i= k; i < a.length; i++) {
if(a[i]< values[counter]) {
for(int j= k-1; j> counter; j--) {
values[j]= values[j-1];
}
values[counter]= a[i];
}
if(counter< k) counter++;
}
return values;
}
编辑:Joop Eggen 为我解决了这个问题。向下滚动以查看答案。谢谢!