Java 如果一个int[]数组中的所有值都小于或等于另一个int[]数组,是否有一种优雅的方法(简短而有效)来比较?

Java 如果一个int[]数组中的所有值都小于或等于另一个int[]数组,是否有一种优雅的方法(简短而有效)来比较?,java,Java,到现在为止,我知道了同样的老方法,只需要做一个for循环来进行比较,但是有没有一种更有效的方法(写得更短更快)呢?这两个数组的长度都是n,所以它现在运行的时间是O(n) 是,如果数组A中的最大整数低于数组B中的最小整数 您可以通过Java8获得这些值 int[] arrayA = ...; int max = Arrays.stream(arrayA).max().getAsInt(); int[] arrayB = ...; int min = Arrays.stream(arrayB).mi

到现在为止,我知道了同样的老方法,只需要做一个for循环来进行比较,但是有没有一种更有效的方法(写得更短更快)呢?这两个数组的长度都是n,所以它现在运行的时间是O(n)

是,如果数组A中的最大整数低于数组B中的最小整数

您可以通过Java8获得这些值

int[] arrayA = ...;
int max = Arrays.stream(arrayA).max().getAsInt();
int[] arrayB = ...;
int min = Arrays.stream(arrayB).min().getAsInt();

如果要将第一个数组的每个值与第二个数组的每个值进行比较,则选择“是”。编写两个短循环,一个获取一个数组的最大值,另一个获取另一个数组的最小值,然后比较这些值。如果一个数组的值总是相同的,你甚至可以在同一个循环中得到一个数组的最大值和另一个数组的最小值。

如果你必须对每个元素的数组进行比较,那么你就需要循环它们,并且只有在两个数组都排序的情况下才需要O(n),除了需要O(n^2)。

按照“相同的老方法,”我想你的意思是找到一个(O(n))的最大值和另一个(O(n))的最小值,然后比较这两个值?如果您对这两个数组一无所知(即,如果它们没有排序),那么不会,您不会比这更快。如果你指的是两个嵌套循环,那么它现在不是在O(n)时间内运行的。短循环和高效循环不是一回事。使用
Arrays.stream(arrayA.max().getAsInt()
对您来说很短,但它仍然在内部使用循环来依次检查每个成员,并且在时间上可能没有自己编写循环更有效。不过,我还是会使用流媒体。但是,如果您还想知道一个数组是否大于所有其他数组,我会编写自己的循环,而不是两次流式处理。您可以在不进行排序的情况下获得最高值和最低值。是的,如果我没有错的话,Java的排序方法使其成为O(n log(n))。@shmosel啊,是的,Math.min和Math.max是的?排序不能比n log(n)快,Java或其他。@BryanPressWell不,您必须迭代数组(如在更新的解决方案中),但它是O(n)。太好了!谢谢你,伙计!