알고리즘/리트코드

leetcode - 350. Intersection of Two Arrays II

[문제 바로가기]

 

1. 유형

구현, 정렬

 

2. 문제 분석

두 배열의 교집합을 구하는 문제였습니다.

 

요즘 Stream을 공부 중인데, for을 최소한으로 사용을 연습을 위해 풀어봤습니다.

 

3. 코드

 

static public int[] solution(int[] nums1, int[] nums2) {
		List<Integer> list = new ArrayList<>();
		Map<Integer, Integer> n = new HashMap<>();
		Map<Integer, Integer> m = new HashMap<>();
		Arrays.stream(nums1).forEach(x -> n.put(x, n.getOrDefault(x, 0) + 1));
		Arrays.stream(nums2).forEach(x -> m.put(x, m.getOrDefault(x, 0) + 1));
		for (int k : n.keySet()) {
			if (m.containsKey(k)) {
				int min = Math.min(n.get(k), m.get(k));
				while (min-- > 0) {
					list.add(k);
				}
			}
		}
		int answer[] = list.stream().mapToInt(x -> x).toArray();
		return answer;
	}

 

4. 배운점

list -> Array로 변환

List의 타입은 Integer입니다. 그래서 Array로 변환하기 위해서 스트림에서 mapToInt라이브러리로 int로 변환시켜야 합니다. 그리고 toArray로 배열 리턴.

 

배열 탐색

forEach로 람다식 사용해서, Map초기화해주기.