다음 작업을 받았습니다.다음 코드의 복잡성
주어진 -2 목록. 첫 번째 목록의 크기는 N1이고 두 번째 목록의 크기는 N2입니다. 각 목록에는 동일한 요소가 없습니다. 첫 번째 및 두 번째 목록의 요소로 새 목록을 만드는 코드를 작성하십시오. 이 목록에는 동일한 요소가 없어야합니다. 코드의 복잡도도 추정하십시오.
는 I가 따라와 코드 해주기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가 아니다."
그래서 누군가가 옳은 대답을 말할 수 있습니까? 그리고 복잡성이 어떻게 결정되는지 설명하십시오.
당신이 실제 설명과 오해 증명할 수없는 한해야 N3는, 내가 말할거야 도착 아니. 두 번째 루프는'list2'의 모든 요소에 대해'contains()'를'list1'에 대해 검사합니다. 리스트에있는'contains()'호출은 선형입니다, O (N1), 루프 자체도 선형 적입니다. 따라서 복잡도는 N1 * N2입니다. –