leetcode-350-intersection-of-two-arrays-ii

每天做了两个题,挑一个稍微有意思点的来记录 题目:https://leetcode.com/problems/intersection-of-two-arrays-ii/description/


Given two arrays, write a function to compute their intersection. Example: Given nums1 = [1,2,2,1]   nums2 = [2,2], return [2,2]. Note:

Follow up:

    class Solution {
       public int[] intersect(int[] nums1, int[] nums2) {
           Arrays.sort(nums1);
           Arrays.sort(nums2);
           int l1 = nums1.length;
           int l2 = nums2.length;
           
           
           List<Integer> list = new ArrayList<Integer>();
           int i = 0, j = 0;
           while(i < l1 && j < l2){
                if(nums1[i] < nums2[j]){
                    i++;
                }else if(nums1[i] > nums2[j]){
                    j++;
                }else{
                    list.add(nums1[i]);
                    i++;j++;
                }
           }
           
          int[] res = new int [list.size()];
           int n  =0;
           for(int num : list){
               res[n++] = num;
           }
           return res;
       }
    }

2.  还有一个用map来做的版本,我第一版是这样的。没调出来。。。。感觉java map没有c++ 好用。。。 用一个map记录其中的一个数组,以数组的值为键,每一个值出现的个数为值。。。在遍历另一个数组时,出现一个map.containKey()为true的就记录到结果,map的值减一

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

这个题目还有三个扩展问题:

0

Powered by Jekyll and Theme by solid