我正在寻找有关此解决方案的说明。谁能在以下两点上指导我:
高度赞赏您的澄清。预先感谢
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)
答案 0 :(得分:1)
您的第二个解决方案也是O(N ^ 2),因为在幕后包含了作品O(N)。
第一个解决方案O(N * LogN):
总体复杂度O(NLogN)
第二个解决方案O(N)-如果数组已排序。如果不是O(NLogN),则由于步骤1
代码:
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;
答案 1 :(得分:0)
size,isEmpty,get,set,iterator和listIterator操作在恒定时间内运行。加法运算以固定的固定时间运行,也就是说,添加n个元素需要O(n)时间。 所有其他操作均在线性时间内运行(大致而言)。与LinkedList实现相比,常数因子较低。
https://docs.oracle.com/javase/6/docs/api/java/util/ArrayList.html