두 배열의 교차점 - II

Leet 코드 문제 링크: https://leetcode.com/problems/intersection-of-two-arrays-ii/
팔로우: |

방법 1: 이미지 설명이 포함된 2점 접근 방식( https://leetcode.com/problems/intersection-of-two-arrays-ii/discuss/954800/Java-solution-with-explanation-and-pictures )

방법 2: 빈도 HashMap 사용

learn about

creating Frequency HashMaps : Frequency Hashmaps are created using :



 if (charCountMap.containsKey(c)) {

                // If char is present in charCountMap,
                // incrementing it's count by 1
                charCountMap.put(c, charCountMap.get(c) + 1);
            }
            else {

                // If char is not present in charCountMap,
                // putting this char to charCountMap with 1 as it's value
                charCountMap.put(c, 1);
            }
        }


솔루션은 다음과 같이 제공될 수 있습니다. 여기서 두 개의 해시맵을 생성하고 발생 빈도를 입력하고 비교합니다.

class Solution (
  public int[] intersect(int[] nums1, int[] nums2) {
        List<Intger> arr = new ArrayList<Integer>();
        HashMap<integer,Integer> mapl =new HashMap<> ();
        HashMap<Integer,Integer> map2 = new HashMapc>();
        for(int i =0; i < nums1.length; i++)(
            if(map1.containskey(nums1[i]))
              map1.put(nums1[i), maps.get (nums1[i]) +1);
            else
              maps1.put (nums1[i], 1);
       for (int i=0; i<nums2.length; i++){
            if(maps2.containskey(nums2[i]))
             maps2.put (nums2[i], maps.get(nums2[i]) +1);
       else
               maps2.put (nums2[i], 1);
//if key of hashmap2 is present in hashmap1 then  
//find the minimum frequency of character between these has maps
        for(Integer key: map1.keyset ())(
            if(map2.containskey(key)){
                int x= Math.min(map2.get(key), mapl.get (key));
                while(x-- > 0){
                    arr.add(key);
//converting list to array
        int result[] - new int [arr.size()];
        for(int i 0; i carr.size(); i++)
            result[1] - arr.get(1);
        return result;



방법 3: 하나의 HashMap 사용: solution

하나의 HashMap 메서드를 두 개 대신 사용할 수도 있으며 HashMap의 빈도 속성을 사용합니다.

우리가 기억해야 할 유일한 점은 nums1[]에서와 같이 빈도를 해당 횟수만큼만 등록하려고 하므로 nums2[] 해시맵에서 빈도 수를 줄이는 것입니다.

class Solution {
    public int[] intersect(int[] nums1, int[] nums2) {
        HashMap<Integer,Integer> map= new HashMap<Integer,Integer>();
        ArrayList<Integer> ans= new ArrayList<Integer>();
        for ( int i = 0 ; i < nums1.length; i++){
            //frequency counter: charCountMap.put(c, charCountMap.get(c) + 1);
            if(map.containsKey(nums1[i]))
                map.put(nums1[i],map.get(nums1[i])+1);
                else map.put(nums1[i],1);
                }  
        for (int i = 0 ; i <nums2.length; i++){
        if(map.containsKey(nums2[i]) && map.get(nums2[i]) > 0){
            map.put(nums2[i],map.get(nums2[i])-1);
            ans.add(nums2[i]);
            } 
          }

    //  Now we just turn our list into an array using get method and return.
    int[] result = new int[ans.size()];
    for (int i = 0 ; i <ans.size(); i++){
        result[i] = ans.get(i);
    }

    return result;

            }
        }


참고 자료:
Different ways of converting Lists to Arrays: .get method, list.toArray(myArray)

좋은 웹페이지 즐겨찾기