在数组中查找min元素

时间:2015-02-17 19:06:07

标签: java arrays

测试代码以查找数组中的min和max元素。我找到最大值的代码很好..但是我的min打印出“数组中的最小元素:0”。我可能有一个小错误让我失去了大声笑。

 public void deleteMin() {

  // set value for comparision starting from the beginning of the array
  int arrayMin = arr[0];

  for (int j = 0; j < nElems; j++) {
     if (arr[j] < arrayMin) {
        arrayMin = arr[j];
     }
    // insert delete functionality    
  } 
  System.out.println("Minimum element in the array: " + arrayMin);
}

3 个答案:

答案 0 :(得分:8)

您的代码现在正确无误。代码完成后arrayMin包含0的唯一原因是

  • nElems未设置为arr.length
  • 0确实是数组中最小的元素。

代码可以简化。

Java 8

int arrayMin = IntStream.of(arr).min().getAsInt();

Java 7

int arrayMin = arr[0];
for (int i : arr)
    arrayMin = Math.min(arrayMin, i);

(注意,两个解决方案都假设一个非空数组,因为否则将是未定义的。)

答案 1 :(得分:1)

你可以做到

List<Integer> yourList = new ArrayList<Integer>(arr.length);
for (int i= 0; i< arr.length; i++)
    yourList.add(arr[i]); 

Collections.min(yourList);
Collections.max(yourList);

请参阅maxmin文档。

或者如果你已经提到了@ioobe的Java 8,那么

IntStream.of(arr).min().getAsInt();

答案 2 :(得分:0)

如果你只是迭代数组,那么利用你可以有两个指针而不只是一个指针的事实。

因此,这可以通过一半的迭代次数完成工作:

public static int minElementInArray(int[] a) {      
    int minArrayElement = Integer.MAX_VALUE;

    for (int i = 0; i < a.length / 2; i++) {
        if (a[i] < minArrayElement) {
            minArrayElement = a[i];
        } 

        if (a[a.length - i - 1] < minArrayElement) {
            minArrayElement = a[a.length - i - 1];
        }
    }       
    return minArrayElement;
}