• 力扣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 }
  • 相关阅读:
    闭包的最准确的解释-待翻译
    undefined 和 null 的异同
    Javascript深度克隆一个对象
    产品培训的经验
    JavaScript库开发者们的规则
    IOS ——UI篇—— UITableView的常用属性及代理方法的用法总结
    IOS ——UI篇—— 自定义UITableViewCell的方法
    IOS ——UI篇—— UIScrollView的用法总结
    使用UIKit中的tag属性要注意的
    IOS ——UI篇——UITabBarController的基本用法
  • 原文地址:https://www.cnblogs.com/biehongli/p/12496700.html
Copyright © 2020-2023  润新知