TIL

[코테연습] 350. Intersection of Two Arrays II

크라00 2024. 7. 2. 09:58


 - 배열문제

https://leetcode.com/problems/intersection-of-two-arrays-ii/?envType=daily-question&envId=2024-07-02


 - 문제분석
 1. 2개의 배열이 주어진다.
 2. 2개의 배열이 겹치는 숫자를 배열에 담아 리턴하시오

 - 문제풀이
 1. Map<Integer, Integer> map 을 초기화한다.
 2. 첫번째 배열에 있는 숫자를 모두 담는다.
  2-1. key 는 배열의 숫자로, value 는 숫자의 갯수로 저장한다.
 3. 두번째 배열을 반복문으로 돌린다.
  3-1. map 을 탐색하면서, key 값이 있을 경우에 List 에 해당 숫자를 담는다.
  3-2. value 값은 1개 낮춘다.
  3-3. map.get(key) 의 value 가 0 보다 클때만, List 에 담는다.
 4. List 를 리턴해준다.
 

 

class Solution {
    public int[] intersect(int[] nums1, int[] nums2) {
        Map<Integer, Integer> map = new HashMap<>();
        for(int i = 0; i < nums1.length; i++) {
            map.put(nums1[i], map.getOrDefault(nums1[i], 0)+1);
        }
        List<Integer> list = new ArrayList<>();
        for (int i = 0; i < nums2.length; i++) {
            if (map.get(nums2[i]) != null){
                if (map.get(nums2[i]) > 0) {
                    map.put(nums2[i], map.get(nums2[i])-1);
                    list.add(nums2[i]);
                }
            }
        }
        int[] rs = new int[list.size()];
        int index = 0;
        for (int num : list) {
            rs[index++] = num;
        }

        return rs;
    }
}