在一个语句中查找无序数组中的最大(或最小)元素,同时保持顺序[重复]
Posted
技术标签:
【中文标题】在一个语句中查找无序数组中的最大(或最小)元素,同时保持顺序[重复]【英文标题】:Find largest (or smallest) element in unordered array in one statement while preserving order [duplicate] 【发布时间】:2013-11-29 21:54:28 【问题描述】:我知道如何找到 Java 中最大和最小的元素:
-
对数组进行排序
使用 for 循环遍历数组并检查最小的。
但是有没有办法在一个语句中检查最大或最小?此外,需要保持秩序。
条件:
-
同一类中没有方法调用
序列未排序,并且保持未排序
不能访问外部库(例如,
ArrayUtils
是不允许的)。
假设这是一个普通的 Java 数组,即 int[]
,而不是 ArrayList<T>
或 LinkedList<T>
。
【问题讨论】:
如果它是自然排序的,最大和最小是第一个/最后一个或最后一个/第一个元素(取决于排序顺序),为什么循环!? 哦,对不起,它是未排序的(我在标题中放了未排序,但意思是未排序)。 @user473973 RC 的意思是:如果您在步骤 1 中对数组进行排序,则不必循环,因为最小的元素就是数组的第一个元素 - 这就是排序通常所做的! 【参考方案1】:Integer arr[] = new Integer[50];
// fill the array with integers
Collections.min(Arrays.asList(arr));
Collections.max(Arrays.asList(arr));
示例:
Integer arr[] = 7, 8, 1, 2, 6;
System.out.println(Collections.min(Arrays.asList(arr)));
System.out.println(Collections.max(Arrays.asList(arr)));
输出:
1
8
如果您必须使用int[]
而不是Integer[]
和建议的单语句约束,您可以使用ArrayUtils.toObject
函数,它将int[]
转换为其对应的包装类Integer[]
。但我不认为你在使用外部库之后。
【讨论】:
有点作弊,但由于asList()
包装了数组,它可能是允许的。为了性能,直接数组访问会更快,所以要注意巨大的数组。
这不适用于int[]
是的,但是 OP 需要在一个语句中进行操作。在这里,在一个声明中;):P以上是关于在一个语句中查找无序数组中的最大(或最小)元素,同时保持顺序[重复]的主要内容,如果未能解决你的问题,请参考以下文章