集合专题--350. 两个数组的交集 II

给定两个数组,编写一个函数来计算它们的交集。
示例 1:
输入: nums1 = [1,2,2,1], nums2 = [2,2]
输出: [2,2]

解题思路:
1.定义map集合存储num1中值并且计数
2.遍历num2并且判断是否含有map集合的值,并且判断数要大于0.有的话,那么就map集合计数减去一
3.把交集放到集合中,然后定义数组,遍历链表转成数组。

class Solution {
    public int[] intersect(int[] nums1, int[] nums2) {
     //计数器,key为数组中的数字,value为该数字在数组中出现的次数
      Map<Integer, Integer> counter = new HashMap<>(); 
        //存储到map集合中,并且记录次数
         for (int i = 0; i < nums1.length; i++) {

             //取出数来。
              int num = nums1[i];
              //计数
              if (counter.containsKey(num)) {
                  counter.put(num, counter.get(num) + 1);
              } else {
                  counter.put(num, 1);
              }
         }
        //定义一个链表
         List<Integer> tempList = new ArrayList<>();
         for (int i = 0; i < nums2.length; i++) {
             int num = nums2[i];
             //遍历数组2,并且如果存在,并且减去计数,把他存到链表。
             if (counter.containsKey(num) && counter.get(num) > 0) {
                 counter.put(num, counter.get(num) - 1); //计数器中记录该数字的次数减1
                 tempList.add(num); //将该数字添加到list中
            }
         }
        //定义一个数组。
         int[] result = new int[tempList.size()];
         //为满足题目返回值类型,将list转换为int数组
         for (int i = 0; i < result.length; i++) {
             result[i] = tempList.get(i);
         }
         return result;
    }
}
发布了234 篇原创文章 · 获赞 4 · 访问量 6586

猜你喜欢

转载自blog.csdn.net/u010160949/article/details/104316191
今日推荐