测试代码以查找数组中的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);
}
答案 0 :(得分:8)
您的代码现在正确无误。代码完成后arrayMin
包含0的唯一原因是
nElems
未设置为arr.length
或代码可以简化。
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);
或者如果你已经提到了@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;
}