我被賦予了以下任務:以下代碼的複雜性
給定-2列表。第一個列表的大小是N1,第二個列表的大小是N2。每個列表都沒有相同的元素。 編寫一個代碼,用第一個和第二個列表中的元素創建一個新列表。這個列表也不應該有相同的元素。 另外估計你的代碼的複雜性。
我寫的跟隨着代碼:
public class Lists {
static ArrayList<Integer> getNewList(ArrayList<Integer> list1,
ArrayList<Integer> list2) {
ArrayList<Integer> tmp = new ArrayList<>();
for (Integer i : list1) {
tmp.add(i);
}
for (Integer i : list2) {
if (!list1.contains(i))
tmp.add(i);
}
return tmp;
}
public static void main(String[] args) {
Integer[] arr1 = {1, 2, 3, 14, 15, 16};
Integer[] arr2 = {3, 6, 7, 8, 14};
ArrayList<Integer> list1 = new ArrayList<>(Arrays.asList(arr1));
ArrayList<Integer> list2 = new ArrayList<>(Arrays.asList(arr2));
for (Integer i : getNewList(list1, list2)) {
System.out.print(i + " ");
}
}
}
說getNewList方法的執行那個時候是成正比N1 N2 *。作爲回覆,我收到以下內容,但沒有任何解釋 - 「你錯了,這個代碼的複雜性不是N1 * N2」。
那麼有人可以告訴什麼是正確的答案?並解釋複雜性如何確定?
除非你能用實際的解釋證明我錯了,我會說沒有。第二個循環對'list1'中的'list2'中的每個元素執行'contains()'檢查。列表中的contains()調用是線性的,O(N1),循環本身顯然也是線性的。所以複雜度是N1 * N2。 –