Java:获取2个数组,查找两个数组中存在的元素是否返回true,如果存在,否则返回false
我正在寻找一些关于这个解决方案的澄清。有谁能就以下两点向我提供指导:Java:获取2个数组,查找两个数组中存在的元素是否返回true,如果存在,否则返回false,java,arrays,algorithm,Java,Arrays,Algorithm,我正在寻找一些关于这个解决方案的澄清。有谁能就以下两点向我提供指导: 下面的算法是好的解决方案吗 我的大O计算正确吗 非常感谢您的澄清。提前谢谢 public static void main(String[] args) { String[] a = {"a", "b", "c", "d"}; String[] b = {"z", "f", "c"}; boolean value1 = find(a, b); System.out.println(value1
public static void main(String[] args) {
String[] a = {"a", "b", "c", "d"};
String[] b = {"z", "f", "c"};
boolean value1 = find(a, b);
System.out.println(value1);
boolean value2 = findArray(a, b);
System.out.println(value2);
}
/*
since the both the array is of diff size for nested loop
Big O = O(n*n)
if array size is same Big O = O(n^2)
*/
private static boolean find(String[] a, String[] b) {
for (int i = 0; i < a.length; i++) {
String val1 = a[i];
for (int j = 0; j < b.length; j++) {
if (val1.equals(b[j])) {
System.out.println(val1 + " : " + b[j]);
return true;
}
}// O(n)
}// O(n)
return false;
}// O(n*n)
/*
Big O = O(n)
*/
private static boolean findArray(String[] a, String[] b) {
//create array list from array
List<String> list = new ArrayList<>(Arrays.asList(b));
for (int i = 0; i < a.length; i++) {
String val1 = a[i]; //O(1)
if (list.contains(val1)) {
System.out.println(val1 + " : contain in list b");
return true;
}// O(1)
}// O(n)
return false;
}// O(n)
publicstaticvoidmain(字符串[]args){
字符串[]a={“a”、“b”、“c”、“d”};
字符串[]b={“z”,“f”,“c”};
布尔值1=查找(a,b);
系统输出打印项次(值1);
布尔值2=findArray(a,b);
系统输出打印项次(值2);
}
/*
由于这两个数组的大小不同,因此嵌套循环的大小不同
大O=O(n*n)
如果数组大小相同,则大O=O(n^2)
*/
私有静态布尔查找(字符串[]a,字符串[]b){
for(int i=0;i
您的第二个解决方案也是O(N^2),因为包含在引擎盖下工作O(N) 第一个解决方案O(N*LogN):
int curA=0,路缘=0;
while(true){
如果(curA>=a.length | |路缘>=b.length)
打破
如果(a[curA]b[路缘]){
路缘++;
继续;
}
返回true;
}
返回false;
这个问题不是更像一个问题吗?谢谢你的回答。在时间复杂度方面,有没有更好的方法来解决这个问题。很高兴能提供帮助!我想不出比@mondayguy建议的更好的解决方案了。
int curA = 0, curB = 0;
while (true) {
if (curA >= a.length || curB >= b.length)
break;
if (a[curA] < b[curB]) {
curA++;
continue;
}
if (a[curA] > b[curB]) {
curB++;
continue;
}
return true;
}
return false;