【LeetCode-简单题】350. 两个数组的交集 II

文章目录

    • 题目
    • 方法一:哈希表
    • 方法二:双指针

题目

【LeetCode-简单题】350. 两个数组的交集 II_第1张图片

方法一:哈希表

  1. 用哈希表记录第一个数组的每个数和每个数的出现次数
  2. 再遍历第二个数组,如果哈希表中有这个数,并且次数还不为0,说明是交集元素,加入结果集,(并且让该数的次数-1)如果哈希表右这个元素,但是次数为0 了,就不能加入结果集了。若遇到哈希表没有的数,直接跳过

参考链接两个数组的交集 II

class Solution {
    public int[] intersect(int[] nums1, int[] nums2) {
        Map<Integer,Integer> map = new HashMap<>();
        List<Integer> res = new ArrayList<>();
        for(int i : nums1){
            if(!map.containsKey(i)) map.put(i,1);
            else map.put(i,map.get(i)+1);
        }
        for(int i : nums2){
            if(!map.containsKey(i)) continue;
            else if(map.get(i) > 0){
                map.put(i,map.get(i)-1);
                res.add(i);
            }
        }
        int[] array = new int[res.size()];
      for (int i = 0; i < res.size(); i++) {
              array[i] = res.get(i);
        }
        return  array;
    }
}

方法二:双指针

  1. 首先就是要对两个数组进行排序
  2. 然后再根据指针进行循环比较,若相等,则记录位置元素到结果集,如果其中一个大于另一个。那就移动小的一方的指针,再比较,直到一方的指针走完自己的数组长度了

【LeetCode-简单题】350. 两个数组的交集 II_第2张图片

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

      return res;
      
      }
}

你可能感兴趣的:(力扣,#,简单题,leetcode,算法,职场和发展)