首页 > 其他分享 >两个数组的交集

两个数组的交集

时间:2024-08-02 22:29:55浏览次数:15  
标签:Set 两个 交集 int 遍历 数组 nums1 nums2

使用数据结构Set

我们定义一个Set集合,先去遍历数组nums1, 让其内部所有元素都存储到这个set集合中,然后再去遍历nums2,如果nums2中的元素在set集合中包含了,则说明这是两个数组都有的

import java.util.*;
class Solution {
    public int[] intersection(int[] nums1, int[] nums2) {
        // if (nums1 == null || nums1.length == 0 || nums2 == null || nums2.length == 0) {
        //     return new int[0];
        // }
        Set<Integer> set1 = new HashSet<>();
        Set<Integer> resSet = new HashSet<>();
        //遍历数组1
        for (int i : nums1) {
            set1.add(i);
        }
        //遍历数组2的过程中判断哈希表中是否存在该元素
        for (int i : nums2) {
            if (set1.contains(i)) {
                resSet.add(i);
            }
        }
      
        //方法1:将结果集合转为数组

        return resSet.stream().mapToInt(x -> x).toArray();
    }
}

数组法

这道题中有要求,两个数组的长度都控制在了1000以内,我们可以定义一个长度为1001的数组temp,遍历nums1,让其中的元素所对应temp数组下标的位置元素置为1,然后再去遍历nums2,如果nums2中的元素所对应temp中的下标位置的元素已经为1了,说明这是两者共有的元素,加入到一个Set集合中

import java.util.*;
class Solution {
    public int[] intersection(int[] nums1, int[] nums2) {
        //数组法来写
        int[] temp=new int[1001];
        Set<Integer> list=new HashSet<>();
        for(int i=0;i<nums1.length;i++){
            temp[nums1[i]]=1;
        }
        for(int i=0;i<nums2.length;i++){
            if(temp[nums2[i]]==1){
                list.add(nums2[i]);
            }
        }
        int[] result=list.stream().mapToInt(Integer::intValue).toArray();
        return result;
    }
}

标签:Set,两个,交集,int,遍历,数组,nums1,nums2
From: https://www.cnblogs.com/dfj-blog/p/18339707

相关文章

  • nginx 同时监听两个端口
     nginx两个端口Nginx不能同时监听两个端口,因为它是一个反向代理服务器,通常只设置一个监听端口(通常是80或443),然后根据请求的host或其他参数将请求转发到不同的后端服务。如果你的需求是让Nginx监听两个不同的端口,并将请求分别转发到不同的服务,你可以这样配置: ......
  • 位图--类似于数组,用于整数的集合
    位图(Bitmap)是一种数据结构,它使用位(bit)来表示信息,通常用来表示一组元素的集合。在位图中,每个位对应集合中的一个元素,如果位的值为1,则表示该元素存在或被选中;如果位的值为0,则表示该元素不存在或未被选中。位图因其高效的内存使用和快速的查找、插入、删除操作而广泛应用于各种场......
  • C语言指针与数组
    在上一篇对指针介绍的文章当中,我们初次了解到了指针,并且知道了地址和内存间的关系,懂得了如何取地址和对指针的解引用,算是对指针有了一个初步的了解。而今天让我们对指针进行更深一步的了解吧~一、指针与数组名我们知道,指针变量是一个用来存放地址的变量,比如我们定义一个整形......
  • 嵌入式软件--C语言高级 DAY 7数组
    一、概念数组array:是多个相同类型数据按一定顺序排列的集合,并使用一个标识符命名。并通过编号(索引,亦称为下标或角标)的方式对这些数据进行统一管理。数组的长度=元素的个数标号角标是从0开始。二、define_array.c定义数组的三种形式:1.定义数组,可以先确定数组的元素个......
  • 两个当前前端领域中好玩的新技术
    1.WebAssembly(Wasm)WebAssembly是一种新兴的技术,它允许在浏览器中运行高性能的低级代码。WebAssembly提供了一种可以在Web浏览器中运行的字节码格式,使得开发者可以用C、C++、Rust等语言编写代码,并将其编译为WebAssembly,在浏览器中高效运行。这种技术非常适用于需要高性......
  • c语言结构体的概述,定义结构体变量类型的方法,结构体变量的引用,结构体变量的初始化,结构
    1.C语言结构体的概述在C语言中,结构体(struct)是一种复合数据类型,用于将不同类型的数据组合在一起。它可以包含基本数据类型(如int、float、char等)以及其他结构体。结构体非常适合表示具有多种属性的复杂数据,如学生信息(包含姓名、年龄、成绩等)或坐标点(包含x和y坐标)。结构......
  • 编程技巧:如何优雅地合并两个有序数组?
    目录题目引用描述1.直接合并排序2.指针3.后逆向双指针进阶:你可以设计实现一个时间复杂度为O(m+n)的算法解决此问题吗?总结题目来自力扣引用合并两个有序数组给你两个按**非递减顺序**排列的整数数组nums1和nums2,另有两个整数m和n,分别表示nums1......
  • JavaSE基础编程十题(数组和方法部分)
    写在前面继续昨天Java中的数组和方法部分的习题,今天写十题编程题,来看看你能写出来几题。答案也是仅供参考,如果有更好的解法欢迎在下面留言!题目展示1.数组查找操作:定义一个长度为10的一维字符串数组,在每一个元素存放一个单词;然后运行时从命令行输入一个单词,程序判断数组是否包......
  • LeetCode 152 乘积最大子数组
    题目描述给你一个整数数组nums,请你找出数组中乘积最大的非空连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。测试用例的答案是一个32位整数。思路这一题用普通的连续子数组思路求解时有一个问题:子问题的最优解不一定是总体的最优局部解。也就是不满足最优......
  • 如何在两个不同的内存位置创建 int 1 ?
    我想向某人展示如何使用is而不是==来比较整数可能会失败。我认为这会起作用,但事实并非如此:>>>importcopy>>>x=1>>>y=copy.deepcopy(x)>>>xisyTrue我可以轻松地为更大的整数做到这一点:>>>x=500>>>y=500>>>xis......