350. Intersection of Two Arrays II

class Solution{
  public int[] intersect(int[] nums1, int[] nums2){
    Map<Integer, Integer> map = new HashMap<>();
    List<Integer> list = new ArrayList<>();
    for(int i = 0; i < nums1.length; i++){
      if(!map.containsKey(nums1[i])){
        map.put(nums1[i], 1);
      }else{
        map.put(nums1[i], map.get(nums1[i]) + 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.get(nums2[i])-1);
      }
    }
    
    int[] result = new int[list.size()];
    for(int i = 0; i < list.size(); i++){
      result[i] = list.get(i);
    }
    return result;
  }
}

 

       
// 谁小移谁

         Arrays.sort(nums1);
        Arrays.sort(nums2);
        int pnt1 = 0;
        int pnt2 = 0;
        ArrayList<Integer> myList = new ArrayList<Integer>();
        while((pnt1 < nums1.length) &&(pnt2< nums2.length)){
            if(nums1[pnt1]<nums2[pnt2]){
                pnt1++;
            }
            else{
                if(nums1[pnt1]>nums2[pnt2]){
                    pnt2++;
                }
                else{
                    myList.add(nums1[pnt1]);
                    pnt1++;
                    pnt2++;
                }
            }
        }
        int[] res = new int[myList.size()];
        for(int i = 0; i<res.length; i++){
            res[i] = (Integer)myList.get(i);
        }
        return res;        

 

 

Note:

  • Each element in the result should appear as many times as it shows in both arrays.
  • The result can be in any order.

Follow up:

  • What if the given array is already sorted? How would you optimize your algorithm?
  • What if nums1's size is small compared to nums2's size? Which algorithm is better?
  • What if elements of nums2 are stored on disk, and the memory is limited such that you cannot load all elements into the memory at once?

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

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]

posted on 2018-07-18 08:51  猪猪&#128055;  阅读(116)  评论(0)    收藏  举报

导航