数组的最小元素[重复]

Posted

技术标签:

【中文标题】数组的最小元素[重复]【英文标题】:Minimum element of an array [duplicate] 【发布时间】:2014-12-19 02:27:20 【问题描述】:

我在 Java 中有一个 double[] foo

是否有一个库函数可以提取这个数组中的最小值?我知道我可以构建一个,但如果库函数可用,这不是一个好习惯。 java.util.Arrays 里面什么都没有。

(在 C++ 中,我们有 std::min_element 等,甚至在 C++11 中还有一个新函数可以同时获取最小值和最大值!)

【问题讨论】:

当它需要大量复杂的代码行时,这不是一个好习惯。那不是你的情况。只需实施一个简单的三行解决方案。 很遗憾不是这样。一旦您检查了空值、零长度数组等,超过 3 行。 【参考方案1】:

假设 Java 8:

double[] arr =  1.0, 2.0 ;
double min = DoubleStream.of(arr)
                         .min()
                         .getAsDouble();

【讨论】:

+1,漂亮(鉴于 Java 8 是当前标准并且我标记为 Java,这是对我问题的最佳答案)但还没有 Java 8。【参考方案2】:

嗯,Collections 类有这样的方法。

你可以写

Double[] arr = 0.5,0.7;
System.out.println("min = " + Collections.min(Arrays.asList(arr)));

或者让它更短:

System.out.println("min = " + Collections.min(Arrays.asList(-67,-89,64,34)));

【讨论】:

+1 但对将double[] 转换为Double[] 持保留态度 @SlodgeMonster Arrays.asList 在双精度数组上将返回一个带有单个 double[] 元素的列表,因此您必须使用双精度数组。 谢谢,我最终将double[] 更改为Double[]Collections.min(Arrays.asList(arr)) 是标准 Java,不会进行深拷贝。【参考方案3】:

您可以使用ArrayUtils.toObject 将double[] 转换为Double[]。 然后使用Arrays.asList 将数组转换为列表,并使用Collections.min 找到最小值。

double[] d = new double[] 1, 2, 3;
Double minValue = Collections.min(Arrays.asList(ArrayUtils.toObject(d)));
System.out.println(minValue);

【讨论】:

【参考方案4】:

您可以使用com.google.common.primitives.Doubles

 double[] arr =  4.3, 4.9 ;
 double min = Doubles.min(arr);
 //OR
 //double min = Doubles.min(4.3, 4.9);

【讨论】:

以上是关于数组的最小元素[重复]的主要内容,如果未能解决你的问题,请参考以下文章

在一个语句中查找无序数组中的最大(或最小)元素,同时保持顺序[重复]

如何将一个数组划分为 K 个子数组,以使所有子数组中重复元素的数量之和最小?

在numpy数组中找到第n个最小的元素[重复]

寻找一个数组中未出现的最小正整数(数组元素可重复)

二分查找(允许重复元素的有序数组)

最小栈(栈设计)删除有序数组中的重复项(数组双指针)最大数(贪心字符串)