Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 用最佳执行方法查找两个数组中的公共元素_Java_Arrays - Fatal编程技术网

Java 用最佳执行方法查找两个数组中的公共元素

Java 用最佳执行方法查找两个数组中的公共元素,java,arrays,Java,Arrays,实现一种方法,该方法检查整数数组参数1和整数数组参数2中是否都存在整数,并以最佳性能打印搜索结果。方法参数包括:(1)第一个整数数组和(2)与参数1大小相同的第二个整数数组,以及(3)要搜索的整数 注意更好的性能意味着一个更好的执行方法需要更少的一般工作步骤来解决数组大小相同的问题。您可能需要查看Java.util.Arrays的JavaSEAPI页面 我能够实现该解决方案,但我不确定它是否是性能最好的解决方案,因为我没有使用任何java.util.Arrays方法,因为我不确定必须使用哪种方法

实现一种方法,该方法检查整数数组参数1和整数数组参数2中是否都存在整数,并以最佳性能打印搜索结果。方法参数包括:(1)第一个整数数组和(2)与参数1大小相同的第二个整数数组,以及(3)要搜索的整数

注意更好的性能意味着一个更好的执行方法需要更少的一般工作步骤来解决数组大小相同的问题。您可能需要查看Java.util.Arrays的JavaSEAPI页面

我能够实现该解决方案,但我不确定它是否是性能最好的解决方案,因为我没有使用任何java.util.Arrays方法,因为我不确定必须使用哪种方法才能得到最佳答案

public static void findCommonElements(int[] arr1, int[] arr2, int num){

        for(int i = 0; i < arr1.length; i++){

            for(int j = 0; j < arr2.length; j++){

                if(arr1[i] == arr2[j] && arr1[i] == num){

                    System.out.println(num);

                }

            }
        }

    }

公共静态void findCommonElements(int[]arr1,int[]arr2,int num){
for(int i=0;i
更新: 我能够使用以下解决方案更新代码,该解决方案完全删除for循环,并实现二进制代码以获得更好的性能

int[] arr1 = {7,8,5,1,2,3,6,7};
int[] arr2 = {9,8,6,4,1,2,4,5};
Arrays.sort(arr1);
Arrays.sort(arr2);

int index1 = Arrays.binarySearch(arr1, 5);
int index2 = Arrays.binarySearch(arr2, 5);
System.out.println(index1);
System.out.println(index2);

if(index1 < 0 || index2 < 0){
    System.out.println("number not found in both arrays");
}
else{
    System.out.println("number found in both arrays");
}
int[]arr1={7,8,5,1,2,3,6,7};
int[]arr2={9,8,6,4,1,2,4,5};
Arrays.sort(arr1);
Arrays.sort(arr2);
int index1=Arrays.binarySearch(arr1,5);
int index2=Arrays.binarySearch(arr2,5);
系统输出打印项次(index1);
系统输出打印项次(index2);
if(index1<0 | | index2<0){
System.out.println(“两个数组中均未找到编号”);
}
否则{
System.out.println(“在两个数组中找到的编号”);
}

问题描述有点难以理解,但通过参考示例代码,我认为这是一个合理的重写:编写性能最佳的方法,将两个长度相同的
int
数组和一个标量
int
value
i
作为参数,并打印
i
的值是否出现在两个数组中

第一个解决方案测试从第一个数组和第二个数组中分别提取的每对元素,以确定它们是否彼此相等以及是否与目标值相等。这对于所解释的问题来说效率极低

您的第二个解决方案首先对数组进行排序,以便能够使用二进制搜索来尝试查找目标元素。这样做更好,但效率仍然很低。尽管二进制搜索速度非常快,但为它们做准备所需的排序比单次二进制搜索节省的工作量要多得多

因为只确定目标值是否出现在两个数组中就足够了,所以您可以

  • 独立于其他阵列扫描每个阵列一次目标值
  • 如果第一次扫描未找到目标值,则跳过第二次扫描
  • 找到目标值时,从每次扫描中提前中断
后两个是较小的改进,因为它们只减少了最小和平均步数。然而,第一个是巨大的改进,特别是当数组大小增加时,因为对于长度为n的数组,在最坏的情况下,这需要与n成比例的步数,而第一个示例代码需要与n成比例的步数在平均和最坏的情况下,从l到n2,在平均和最坏的情况下,第二个需要与n log n成比例的时间

实现按预期进行。但是,关于

我能够实现这个解决方案,但我不确定它是否正确 性能最好的一个,因为我没有使用任何java.util.Array 方法,因为我不确定使用哪一种方法来获得 最佳答案

public static void findCommonElements(int[] arr1, int[] arr2, int num){

        for(int i = 0; i < arr1.length; i++){

            for(int j = 0; j < arr2.length; j++){

                if(arr1[i] == arr2[j] && arr1[i] == num){

                    System.out.println(num);

                }

            }
        }

    }


,我不认为
java.util.Arrays
提供了任何特别有助于解决此问题的方法,特别是考虑到尽可能实现最佳性能的方向。

问题描述有点难以理解,但通过参考示例代码,我认为这是一个合理的重写:编写性能最佳的方法,将两个长度相同的
int
数组和一个标量
int
i
作为参数,并打印
i
的值是否出现在两个数组中。”

第一个解决方案测试从第一个数组和第二个数组中分别提取的每对元素,以确定它们是否彼此相等以及是否与目标值相等。这对于所解释的问题来说效率极低

您的第二个解决方案首先对数组进行排序,以便能够使用二进制搜索来尝试查找目标元素。这样做更好,但效率仍然很低。尽管二进制搜索速度非常快,但为它们做准备所需的排序比单次二进制搜索节省的工作量要多得多

因为只确定目标值是否出现在两个数组中就足够了,所以您可以

  • 独立于其他阵列扫描每个阵列一次目标值
  • 如果第一次扫描未找到目标值,则跳过第二次扫描
  • 找到目标值时,从每次扫描中提前中断
后两个是较小的改进,因为它们只减少了最小和平均步数。然而,第一个是巨大的改进,特别是当数组大小增加时,因为对于长度为n的数组,在最坏的情况下,这需要与n成比例的步数,而第一个示例代码需要与n成比例的步数在平均和最坏的情况下,从l到n2,在平均和最坏的情况下,第二个需要与n log n成比例的时间

实现按预期进行。但是,关于

我能够实现这个解决方案,但我不确定它是否正确 表现最好的一个,因为我不是
public static boolean findCommonElements(Integer[] arr1, Integer[] arr2, int num) {
    return Arrays.asList(arr1).indexOf(num) > -1 &&
           Arrays.asList(arr2).indexOf(num) > -1;
}