Java 用最佳执行方法查找两个数组中的公共元素
实现一种方法,该方法检查整数数组参数1和整数数组参数2中是否都存在整数,并以最佳性能打印搜索结果。方法参数包括:(1)第一个整数数组和(2)与参数1大小相同的第二个整数数组,以及(3)要搜索的整数 注意更好的性能意味着一个更好的执行方法需要更少的一般工作步骤来解决数组大小相同的问题。您可能需要查看Java.util.Arrays的JavaSEAPI页面 我能够实现该解决方案,但我不确定它是否是性能最好的解决方案,因为我没有使用任何java.util.Arrays方法,因为我不确定必须使用哪种方法才能得到最佳答案Java 用最佳执行方法查找两个数组中的公共元素,java,arrays,Java,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
valuei
作为参数,并打印i
的值是否出现在两个数组中
第一个解决方案测试从第一个数组和第二个数组中分别提取的每对元素,以确定它们是否彼此相等以及是否与目标值相等。这对于所解释的问题来说效率极低
您的第二个解决方案首先对数组进行排序,以便能够使用二进制搜索来尝试查找目标元素。这样做更好,但效率仍然很低。尽管二进制搜索速度非常快,但为它们做准备所需的排序比单次二进制搜索节省的工作量要多得多
因为只确定目标值是否出现在两个数组中就足够了,所以您可以
- 独立于其他阵列扫描每个阵列一次目标值
- 如果第一次扫描未找到目标值,则跳过第二次扫描
- 找到目标值时,从每次扫描中提前中断
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
的值是否出现在两个数组中。”
第一个解决方案测试从第一个数组和第二个数组中分别提取的每对元素,以确定它们是否彼此相等以及是否与目标值相等。这对于所解释的问题来说效率极低
您的第二个解决方案首先对数组进行排序,以便能够使用二进制搜索来尝试查找目标元素。这样做更好,但效率仍然很低。尽管二进制搜索速度非常快,但为它们做准备所需的排序比单次二进制搜索节省的工作量要多得多
因为只确定目标值是否出现在两个数组中就足够了,所以您可以
- 独立于其他阵列扫描每个阵列一次目标值
- 如果第一次扫描未找到目标值,则跳过第二次扫描
- 找到目标值时,从每次扫描中提前中断
public static boolean findCommonElements(Integer[] arr1, Integer[] arr2, int num) {
return Arrays.asList(arr1).indexOf(num) > -1 &&
Arrays.asList(arr2).indexOf(num) > -1;
}