力扣LeetCode,两个数组的交集 II

1、给定两个数组,编写一个函数来计算它们的交集。

示例 1:

1 输入: nums1 = [1,2,2,1], nums2 = [2,2]
2 输出: [2,2]

示例 2:

1 输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]
2 输出: [4,9]

说明:

  • 输出结果中每个元素出现的次数,应与元素在两个数组中出现的次数一致。
  • 我们可以不考虑输出结果的顺序。

进阶:

  • 如果给定的数组已经排好序呢?你将如何优化你的算法?
  • 如果 nums1 的大小比 nums2 小很多,哪种方法更优?
  • 如果 nums2 的元素存储在磁盘上,磁盘内存是有限的,并且你不能一次加载所有的元素到内存中,你该怎么办?

2、代码实现,如下所示:

 1 package com.leetcode;
 2
 3 import java.util.ArrayList;
 4 import java.util.List;
 5 import java.util.Map;
 6 import java.util.TreeMap;
 7
 8 /**
 9  * @ProjectName: dataConstruct
10  * @Package: com.leetcode
11  * @ClassName: ArrayIntersection2
12  * @Author: biehl
13  * @Description: ${description}
14  * @Date: 2020/3/15 11:46
15  * @Version: 1.0
16  */
17 public class ArrayIntersection2 {
18
19     public int[] intersect(int[] nums1, int[] nums2) {
20         Map<Integer, Integer> map = new TreeMap<Integer, Integer>();
21         // 遍历数组nums1
22         for (int num : nums1) {
23             // 如果Map集合中不包含此元素
24             if (!map.containsKey(num)) {
25                 // 就将num设置到map中,并将value值设置为1
26                 map.put(num, 1);
27             } else {
28                 // 此时,如果map中包含了这个元素
29                 // 否则,将num的value值加一。
30                 map.put(num, map.get(num) + 1);
31             }
32         }
33
34         List<Integer> list = new ArrayList<Integer>();
35         // 遍历数组nums2
36         for (int num : nums2) {
37             // 判断,如果map集合中包含了num这个key
38             if (map.containsKey(num)) {
39                 // 就将这个num添加到集合中
40                 list.add(num);
41                 // 此时将map集合中的num数字的频数减一
42                 map.put(num, map.get(num) - 1);
43                 // 如果此时num的频数是0,就删除掉这个num
44                 if (map.get(num) == 0) {
45                     map.remove(num);
46                 }
47             }
48         }
49
50         // 将List集合转换为int数组返回
51         int[] res = new int[list.size()];
52         for (int i = 0; i < list.size(); i++) {
53             res[i] = list.get(i);
54         }
55         return res;
56     }
57
58     public static void main(String[] args) {
59 //        int[] nums1 = new int[]{1, 2, 2, 1};
60 //        int[] nums2 = {2, 2};
61 //        int[] nums1 = new int[]{4, 9, 5};
62 //        int[] nums2 = {9, 4, 9, 8, 4};
63
64         int[] nums1 = new int[]{1, 1, 1, 1, 1, 1};
65         int[] nums2 = {1, 1, 1};
66         ArrayIntersection2 arrayIntersection = new ArrayIntersection2();
67         int[] intersection = arrayIntersection.intersect(nums1, nums2);
68         for (int i = 0; i < intersection.length; i++) {
69             System.out.println(intersection[i]);
70         }
71     }
72
73 }

原文地址:https://www.cnblogs.com/biehongli/p/12496700.html

时间: 2024-10-16 13:21:04

力扣LeetCode,两个数组的交集 II的相关文章

leetcode 两个数组的交集 II

给定两个数组,写一个方法来计算它们的交集. 例如: 给定 nums1 = [1, 2, 2, 1], nums2 = [2, 2], 返回 [2, 2]. /** * @param {number[]} nums1 * @param {number[]} nums2 * @return {number[]} */ var intersect = function (nums1, nums2) { let arr = []; for (let i = 0; i !== nums1.length;

【Leetcode】【简单】【350. 两个数组的交集 II】【JavaScript】

题目描述 350. 两个数组的交集 II 给定两个数组,编写一个函数来计算它们的交集. 示例 1: 输入: nums1 = [1,2,2,1], nums2 = [2,2]输出: [2,2] 示例 2: 输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出: [4,9] 说明: 输出结果中每个元素出现的次数,应与元素在两个数组中出现的次数一致.我们可以不考虑输出结果的顺序. 进阶: 如果给定的数组已经排好序呢?你将如何优化你的算法?如果 nums1 的大小比 nu

前端与算法 leetcode 350. 两个数组的交集 II

目录 # 前端与算法 leetcode 350. 两个数组的交集 II 题目描述 概要 提示 解析 解法一:哈希表 解法二:双指针 解法三:暴力法 算法 # 前端与算法 leetcode 350. 两个数组的交集 II 题目描述 给定两个数组,编写一个函数来计算它们的交集. 示例 1: 输入: nums1 = [1,2,2,1], nums2 = [2,2] 输出: [2,2] 示例 2: 输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4] 输出: [4,9] 说明

领扣(LeetCode)两个数组的交集II 个人题解

给定两个数组,编写一个函数来计算它们的交集. 示例 1: 输入: nums1 = [1,2,2,1], nums2 = [2,2] 输出: [2,2] 示例 2: 输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4] 输出: [4,9] 说明: 输出结果中每个元素出现的次数,应与元素在两个数组中出现的次数一致. 我们可以不考虑输出结果的顺序. 进阶: 如果给定的数组已经排好序呢?你将如何优化你的算法? 如果 nums1 的大小比 nums2 小很多,哪种方法更优? 如

LeetCode 350. 两个数组的交集II

题目: 给定两个数组,编写一个函数来计算它们的交集. 示例 1: 输入: nums1 = [1,2,2,1], nums2 = [2,2] 输出: [2,2] 示例2: 输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4] 输出: [4,9] 说明: 输出结果中每个元素出现的次数,应与元素在两个数组中出现的次数一致. 我们可以不考虑输出结果的顺序. 进阶: 如果给定的数组已经排好序呢?你将如何优化你的算法? 如果 nums1 的大小比 nums2 小很多,哪种方法更优

两个数组的交集 II [ LeetCode - 350 ]

原题地址:https://leetcode-cn.com/problems/intersection-of-two-arrays-ii/description/ 给定两个数组,写一个方法来计算它们的交集. 例如: 给定 nums1 = [1, 2, 2, 1], nums2 = [2, 2], 返回 [2, 2]. 注意: 输出结果中每个元素出现的次数,应与元素在两个数组中出现的次数一致. 我们可以不考虑输出结果的顺序. 跟进: 如果给定的数组已经排好序呢?你将如何优化你的算法? 如果 nums

[LeetCode]数组——两个数组的交集 II

给定两个数组,写一个方法来计算它们的交集. C++ class Solution { public: vector<int> intersect(vector<int>& nums1, vector<int>& nums2) { unordered_map<int, int> m; vector<int> res; for (auto a : nums1) m[a]++; for (auto a : nums2) { if (m[

350 Intersection of Two Arrays II 两个数组的交集 II

给定两个数组,写一个方法来计算它们的交集.例如:给定 nums1 = [1, 2, 2, 1], nums2 = [2, 2], 返回 [2, 2].注意:       输出结果中每个元素出现的次数,应与元素在两个数组中出现的次数一致.       我们可以不考虑输出结果的顺序.跟进:    如果给定的数组已经排好序呢?你将如何优化你的算法?    如果 nums1 的大小比 nums2 小很多,哪种方法更优?    如果nums2的元素存储在磁盘上,内存是有限的,你不能一次加载所有的元素到内存

Leetcode-探索 | 两个数组的交集 II

给定两个数组,写一个方法来计算它们的交集. 例如: 给定 nums1 = [1, 2, 2, 1], nums2 = [2, 2], 返回 [2, 2]. 注意:    输出结果中每个元素出现的次数,应与元素在两个数组中出现的次数一致. 我们可以不考虑输出结果的顺序. 跟进: 如果给定的数组已经排好序呢?你将如何优化你的算法? 如果 nums1 的大小比 nums2 小很多,哪种方法更优? 如果nums2的元素存储在磁盘上,内存是有限的,你不能一次加载所有的元素到内存中,你该怎么办? -----