采用三个最小数字并输出它们的数组

时间:2016-03-28 18:00:06

标签: arrays

我是编程的新手,只是想弄清楚如何解决这个问题。我需要取一个数组,找到三个最小的数字,将它们放入第二个数组然后打印出来。我知道如何将元素从一个数组复制到另一个数组但不确定找到最低的数组。这就是我到目前为止:

int[] array1 = new int[]{1,2,3,4,5,6,7,8};
int[] array2 = new int[array1.length];

     for (int i=0; i<array1.length;i++){
     array2[i] = array1[i]; } System.out.print(Arrays.toString(array2));

谢谢!

4 个答案:

答案 0 :(得分:1)

您可以对数组进行排序,并将前3个元素复制到新数组中,例如:

int[] array = new int[]{1,5,7,0,8,2,3};
Arrays.sort(array);
int newArray[] = new int[3];
for(int i=0 ; i<3 ; i++){
    newArray[i] = array[i];
}
System.out.println(Arrays.toString(newArray));

答案 1 :(得分:1)

如果你有Java 8:

int[] answer = Arrays.stream(array).sorted().limit(3).toArray();

答案 2 :(得分:0)

更优化的方法是使用Guava Ordering

final Integer [] numbers = new Integer[]{23,23,24,2,42,4,235,456,45,7};
final Iterable<Integer> integerIterable = Iterables.cycle(numbers);
final List<Integer> bottom3 = Ordering.natural().leastOf(integerIterable, 3);

它使用O(n)算法,只使用一次传递和O(k)附加内存,在这种情况下k为3。

答案 3 :(得分:0)

对整个数组进行排序是一种方法,但由于数组的大小可能是未知的,排序可能需要更长的时间,因此最好将前3个最小的整数冒泡到顶部。例如:

int[] arr = {9, 5, 2, 1, 0, 5, -10, 25, 45, -25, 90, -72};
int temp;
for(int n = 0; n < 3; n++) {
    for(int i = arr.length-1; i >= 1; i--) {
        if(arr[i] < arr[i-1]) {
            temp = arr[i - 1];
            arr[i - 1] = arr[i];
            arr[i] = temp;
        }
    }
}

for(int i=0; i<3; i++) {
    System.out.println(arr[i]);
}
/* Result:
-72
-25
-10
*/