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

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

以上是关于在一个语句中查找无序数组中的最大(或最小)元素,同时保持顺序[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何查找无序数组中的Top n

求无序数组的两两元素之差绝对值的最小值

查找最大和次大元素(JAVA版)(分治法)

常用类

c#如何查找string数组的某一个值的索引

算法数组与矩阵问题——找到无序数组中最小的k个数