본문 바로가기

알고리즘/LeetCode

[JAVA] LeetCode 350 - Intersection of Two Arrays II

 

Given two arrays, write a function to compute their intersection.

두 배열이 주어지면, 그 중 중복되는 항목들을 반환하는 함수를 작성하라.

 

 

풀이 방법

1. 두 배열을 리스트로 변환한다.

2. 두 리스트 중 사이즈가 더 작은 리스트의 길이만큼 반복문을 수행한다.

3. 사이즈가 작은 리스트에 있는 항목을 사이즈가 큰 리스트에서 찾는다.

4. 같은 항목이 존재할 경우, 결과 리스트에 add한다.

5. 리스트 타입인 result를 배열로 변환하여 리턴한다.

 

class Solution {
    public int[] intersect(int[] nums1, int[] nums2) {
        List<Integer> list1 = Arrays.stream(nums1).boxed().collect(Collectors.toList());
        List<Integer> list2 = Arrays.stream(nums2).boxed().collect(Collectors.toList());
		
        if(list1.size() > list2.size())
            return solution(list2, list1);
        else
            return solution(list1, list2);
    }
    
    public static int[] solution(List l1, List l2) {
        List<Integer> result = new ArrayList<>();
		
        for(int i=0; i<l1.size(); i++) {
            int index = l2.indexOf(l1.get(i));
            if(index >= 0) {
                result.add((Integer) l1.get(i));
                l2.remove(index);
            }
        }
        return result.stream().mapToInt(i -> i).toArray();
    }
}

 

 

시간 & 공간 복잡도 최악

또르르.... 정렬되어있는 경우, 투 포인터를 사용하여 풀 면 될 듯 하다!