zoukankan      html  css  js  c++  java
  • Intersection of Two Arrays(交集)

    来源:https://leetcode.com/problems/intersection-of-two-arrays

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

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

    Note:

    • Each element in the result must be unique.
    • The result can be in any order.

    1. 直接使用HashSet

     1 class Solution {
     2     public int[] intersection(int[] nums1, int[] nums2) {
     3         Set<Integer> set = new HashSet<>();
     4         Set<Integer> intersect = new HashSet<>();
     5         for(int i=0; i<nums1.length; i++) {
     6             set.add(nums1[i]);
     7         }
     8         for(int i=0; i<nums2.length; i++) {
     9             if(set.contains(nums2[i])) {
    10                 intersect.add(nums2[i]);
    11             }
    12         }
    13         int[] result = new int[intersect.size()];
    14         int i = 0;
    15         for(Integer num: intersect) {
    16             result[i++] = num;
    17         }
    18         return result;
    19     }
    20 }// 6 ms

    2. 类似BitMap的思想,LeetCode 1ms sample,缺点是数组中的元素不能为负数……

    (1)求出两个数组的最大值

    (2)建立 长度=最大值+1 的数组A,假设数组的索引为i,那么A[i]的值表示i是否在两个数组中存在,若为0表示不存在于任何一个数组中,为1表示存在于第一个数组中,为2表示两个数组中都存在

     1 class Solution {
     2     public int[] intersection(int[] nums1, int[] nums2) {
     3         int max = 0;
     4         for(int num: nums1) {
     5             if(num > max) {
     6                 max = num;
     7             }
     8         }
     9         for(int num: nums2) {
    10             if(num > max) {
    11                 max = num;
    12             }
    13         }
    14         int[] indexMap = new int[max+1];
    15         for(int num: nums1) {
    16             indexMap[num] = 1;
    17         }
    18         int cnt = 0;
    19         for(int num: nums2) {
    20             if(indexMap[num] == 1) {
    21                 indexMap[num] = 2;
    22                 cnt++;
    23             }
    24         }
    25         int[] result = new int[cnt];
    26         for(int i=0; i<max+1; i++) {
    27             if(indexMap[i] == 2) {
    28                 result[--cnt] = i;
    29             }
    30         }
    31         return result;
    32     }
    33 }
  • 相关阅读:
    目标检测——从RCNN到Faster RCNN 串烧
    论文阅读:SSD: Single Shot MultiBox Detector
    在stm32上使用Arduino IDE(神舟I号为例)
    低功耗STM32F411开发板(原理图+PCB源文件+官方例程+驱动等)
    arduino的IDE开发stm32的板子
    AltiumDesigner14.3.X系列软件安装及破解过程
    arduino-star-otto
    怎样成为一个高手
    我的ubuntu10.04网络设置(VirtualBox)
    ubuntu11.04下安装TCL及TK
  • 原文地址:https://www.cnblogs.com/renzongxian/p/7545365.html
Copyright © 2011-2022 走看看