zoukankan      html  css  js  c++  java
  • LeetCode 350. Intersection of Two Arrays II (两个数组的相交之二)

    Given two arrays, write a function to compute their intersection.

    Example:
    Given nums1 = [1, 2, 2, 1]nums2 = [2, 2], return [2, 2].

    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?

    题目标签:Hash Table

      题目给了我们两个array, 让我们找到相交的数字,这一题与 #349 一样,只是可以包括重复的数字。

      所以利用HashMap 把 nums1 的数字和 出现次数存入;

      比较nums2 和 map1 把相交的数字 和 次数 存入 intersect;

      最后把intersect 里的 数字 按照它的出现次数 存入 int[] res。

    Java Solution:

    Runtime beats 23.67% 

    完成日期:06/05/2017

    关键词:HashMap

    关键点:利用两个HashMap

     1 class Solution 
     2 {
     3     public int[] intersect(int[] nums1, int[] nums2) 
     4     {
     5         HashMap<Integer, Integer> map1 = new HashMap<>();
     6         HashMap<Integer, Integer> intersect = new HashMap<>();
     7         int[] res;
     8         int len = 0;
     9         int pos = 0;
    10         
    11         // store nums1 numbers into map1
    12         for(int n: nums1)
    13             map1.put(n, map1.getOrDefault(n, 0) + 1);
    14 
    15         
    16         // compare nums2 with map1, store intersected numbers into intersect
    17         for(int n: nums2)
    18         {
    19             if(map1.containsKey(n))
    20             {
    21                 intersect.put(n, intersect.getOrDefault(n, 0) + 1);
    22                 len++;
    23                 
    24                 map1.put(n, map1.get(n) - 1);
    25                 
    26                 if(map1.get(n) == 0)
    27                     map1.remove(n);
    28             }
    29                 
    30         }
    31         
    32         res = new int[len];
    33         
    34         for(int n: intersect.keySet())
    35         {
    36             for(int i=0; i<intersect.get(n); i++)
    37                 res[pos++] = n;
    38         }
    39         
    40         return res;
    41     }
    42 }

    参考资料:N/A

    LeetCode 题目列表 - LeetCode Questions List

  • 相关阅读:
    洛谷 P1087 【FBI树】题解
    CF584D 【Dima and Lisa】题解
    洛谷 P1042 【乒乓球】题解
    洛谷 P2010 【回文日期】题解
    洛谷 P1233 【木棍加工】题解
    STM32嵌入式开发学习笔记(五):中断
    STM32嵌入式开发学习笔记(四):使用滴答计时器实现精准计时
    STM32嵌入式开发学习笔记(三):使用按键控制小灯
    STM32嵌入式开发学习笔记(二):将功能封装为库文件
    STM32嵌入式开发学习笔记(一)
  • 原文地址:https://www.cnblogs.com/jimmycheng/p/7797168.html
Copyright © 2011-2022 走看看