美文网首页
[刷题防痴呆] 0350 - 两个数组的交集 II (Inter

[刷题防痴呆] 0350 - 两个数组的交集 II (Inter

作者: 西出玉门东望长安 | 来源:发表于2021-12-24 02:28 被阅读0次

题目地址

https://leetcode.com/problems/intersection-of-two-arrays-ii/description/

题目描述

350. Intersection of Two Arrays II

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]
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?

思路

  • 跟I相比, 加了可以重复的数.
  • 因此引入hashmap储存次数.
  • 用map维护前一个数组中每个值出现的次数.
  • 然后遍历第二个数组,对于每个遍历到的数,在map中将这个数出现的次数-1.

关键点

代码

  • 语言支持:Java
class Solution {
    public int[] intersect(int[] nums1, int[] nums2) {
        Map<Integer, Integer> map = new HashMap<>();
        for (int num: nums1) {
            if (map.containsKey(num)) {
                map.put(num, map.get(num) + 1);
            } else {
                map.put(num, 1);
            }
        }
        
        List<Integer> result = new ArrayList<>();
        for (int num: nums2) {
            if (map.containsKey(num) && map.get(num) > 0) {
                result.add(num);
                map.put(num, map.get(num) - 1);
            }
        }
        
        int[] ans = new int[result.size()];
        int index = 0;
        for (int num: result) {
            ans[index++] = num;
        }
        
        return ans;
    }
}

相关文章

网友评论

      本文标题:[刷题防痴呆] 0350 - 两个数组的交集 II (Inter

      本文链接:https://www.haomeiwen.com/subject/cqjmfrtx.html