LeetCode - 350. Intersection of Two Arrays II(Array, HashTable, Two Pointers, Binary Search, Sorting)*

YAMAMAMO·2022년 3월 7일
0

LeetCode

목록 보기
37/100

문제

두 정수 배열 nums1과 nums2가 지정되면 해당 교차점의 배열을 반환합니다. 결과의 각 요소는 두 배열에 모두 표시된 횟수만큼 표시되어야 하며 원하는 순서로 결과를 반환할 수 있습니다.

https://leetcode.com/problems/intersection-of-two-arrays-ii/

Given two integer arrays nums1 and nums2, return an array of their intersection. Each element in the result must appear as many times as it shows in both arrays and you may return the result in any order.

Example 1:

Input: nums1 = [1,2,2,1], nums2 = [2,2]
Output: [2,2]

Example 2:

Input: nums1 = [4,9,5], nums2 = [9,4,9,8,4]
Output: [4,9]
Explanation: [9,4] is also accepted.

풀이

자바입니다.

  • HashMap을 사용합니다.

  • map 의 key값은 nums1의 값입니다. value는 nums1의 값이 몇 개인지를 나타냅니다.

  • getOrDefault(key, defaultValue) 를 사용합니다. key로 매칭되는 값이 있으면 값을 반환하고, 없으면 defaultValue를 반환합니다.
    ex)

        		int[] nums = { 1, 2, 3, 4, 1, 1 };
    
    			HashMap<Integer, Integer> map = new HashMap<>();
    			for (int i = 0; i < nums.length; i++) {
    				map.put(nums[i], map.getOrDefault(nums[i], 0) + 1);
    			}
    
    			System.out.println(map); //{1=3, 2=1, 3=1, 4=1}
    			```

코드

class Solution {
    public int[] intersect(int[] nums1, int[] nums2) {
       HashMap<Integer, Integer> map = new HashMap<>();
       ArrayList<Integer> list = new ArrayList<>();
       
       for(int i=0; i<nums1.length; i++){
           map.put(nums1[i],map.getOrDefault(nums1[i],0) + 1);
       }
        
       for(int i=0; i<nums2.length; i++){
           if(map.containsKey(nums2[i])&&map.get(nums2[i])>0){
               list.add(nums2[i]);
               map.put(nums2[i],map.getOrDefault(nums2[i],0)-1);
           }
       }
       
       int[] res = new int[list.size()];
       for(int i = 0; i<list.size() ; i++){
           res[i]=list.get(i);
       }
        
       
        return res;
    }
}
profile
안드로이드 개발자

0개의 댓글