Java 从两个数组中查找最大元素

Java 从两个数组中查找最大元素,java,Java,我需要从两个数组中找到最大元素 int arr1[]={20,65,23056,67,678}; int arr2[]={76,23,4545,98,90909}; 我的代码给出了输出,但我认为它的复杂性很高。下面是我的代码。它是好的还是需要改进 int arr1[]={20,65,23056,67,678}; int arr2[]={76,23,4545,98,90909}; int len1=arr1.length; int len2=arr2.lengt

我需要从两个数组中找到最大元素

int arr1[]={20,65,23056,67,678};

int arr2[]={76,23,4545,98,90909};
我的代码给出了输出,但我认为它的复杂性很高。下面是我的代码。它是好的还是需要改进

    int arr1[]={20,65,23056,67,678};
    int arr2[]={76,23,4545,98,90909};
    int len1=arr1.length;
    int len2=arr2.length;
    int max1=arr1[0];
    for(int i=0;i<len1;i++){
        if(arr1[i]>max1){
            max1=arr1[i];
        }

    }
    int max2=arr2[0];
    for(int j=0;j<len2;j++){
        if(arr2[j]>max2){
            max2=arr2[j];
        }

    }
    if(max1>max2){
        System.out.print("max element is:"+max1);
    }
    else{
        System.out.print("Max element is: "+max2);
    }
输出:-90909

试试这个

  Integer arr1[]={20,65,23056,67,678};

  Integer arr2[]={76,23,4545,98,90909};

  Integer max = Stream.concat(Arrays.stream(arr1), Arrays.stream(arr2)).max(Comparator.comparing(Integer::valueOf)).get();

如果我们将第一和第二数组的长度分别看作是n和m。您的解决方案具有On+m的复杂性。这是最好的情况,因为数组没有排序

您可以使用Java streams来实现这一点。如果要避免将值装箱为整数,并且要直接获取基元整数,请使用和:


即使您不想处理流,您仍然可以对其进行一些改进:

int arr1[]={20,65,23056,67,678}; int arr2[]={76,23,4545,98,909}; int len=arr1.length>arr2.length?arr1.length:arr2.length; int max=0; 对于int i=0;ii&&arr1[i]>max{ max=arr1[i]; } 如果arr2.length>i&&arr2[i]>max{ max=arr2[i]; } } System.out.printmax元素为:+max```
这里的其他答案侧重于流,这是非常好的,并且是可以接受的

但是,如果您对流JDK 7及更早版本的使用有限制,则可以将数组放在带有Collections.reverseOrder的树集中,以便按降序对元素进行排序。第0个索引将是数组并集中的最大或mac元素


编辑:请注意,TreeSet不会持久保存重复项,因此您比将重复项存储在数组中要好。在最坏的情况下,如果两个包含5个元素的数组各包含9个重复元素,那么TreeSet将只包含2个元素—唯一的一个元素,另一个元素是重复元素,而两个数组包含10个元素。

这里有什么问题?代码没有问题。一个可能的改进是:创建一个方法来查找数组的max元素,然后对两个数组调用该方法两次-这样可以避免复制和粘贴代码来查找max元素。
int[] arr1 = {20, 65, 23056, 67, 678};
int[] arr2 = {76, 23, 4545, 98, 90909};

int max = IntStream
            .concat(IntStream.of(arr1), IntStream.of(arr2))
            .max()
            .getAsInt();