LeetCode349. 两个数组的交集

news2024/12/28 4:10:26

题目链接

LeetCode349. 两个数组的交集

题目描述

在这里插入图片描述

题解

题解一(Java)

作者:@仲景
因为数据范围和长度都限制在1000,所以直接使用数组即可
因为数据范围和长度都在1000内,所以碰到数字可以直接arr[i] = i来表示这个数字出现的次数
但是因为Java数组默认值是0,所以我们需要对arr的默认值初始化为-1,不然0没有办法统计
需要注意的是我们不需要重复的元素,所以每次arr[i] ≠ -1后,我们要手动把arr[i]改成-1,那么下次就不会再访问到了
时间复杂度:O(n)
空间复杂度:老多了

class Solution {
    public int[] intersection(int[] nums1, int[] nums2) {

        // 声明一个1001长度的数组
        int[] arr = new int[1001];

        // 声明一个1001长度的数组,保存返回结果
        int[] result = new int[1001];
        int index = 0;

        // 全部设置成-1
        for (int i = 0; i < arr.length; i++) {
            arr[i] = -1;
        }

        // 遍历nums1
        for (int i : nums1) {
            arr[i] = i;
        }

        // 遍历nums2,如果当前数字存在,就记录在结果集中
        for (int i : nums2) {
            if (arr[i] != -1) {
                result[index++] = i;
                arr[i] = -1;
            }
        }

        // 拷贝结果数组
        int[] result2 = new int[index];

        for (int i = 0; i < index; i++) {
            result2[i] = result[i];
        }

        return result2;
    }
}

题解二(Java)

作者:@仲景
碰到去重的题,调库一定是Set,因为Set天然去重
思路和题解一类似,把一个数组的所有元素都入到Set中,然后遍历第二个数组,如果Set中存在,就是交集
使用Set保存交集,不需要像方法一一样麻烦,因为Set会自己去重
最后把Set转成数组即可

class Solution {
    public int[] intersection(int[] nums1, int[] nums2) {

        // 创建两个hash表
        Set<Integer> numsSet = new HashSet<>();
        Set<Integer> result = new HashSet<>();

        // 遍历数组1
        for (int i : nums1) {
            numsSet.add(i);
        }

        // 遍历数组2,碰到和num1重复的就添加到结果集中
        for (int i : nums2) {
            if (numsSet.contains(i))
                result.add(i);
        }

        // 把结果集转成数组
        int[] res = new int[result.size()];
        int index = 0;
        for (Integer i : result) {
            res[index++] = i;
        }

        return res;
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/461574.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何有效的开展接口自动化测试,一篇就行

一、简介 接口自动化测试是指使用自动化测试工具和脚本对软件系统中的接口进行测试的过程。其目的是在软件开发过程中&#xff0c;通过对接口的自动化测试来提高测试效率和测试质量&#xff0c;减少人工测试的工作量和测试成本&#xff0c;并且能够快速发现和修复接口错误&…

手写Spring框架---IOC容器实现

目录 框架具备的最基本功能 实现容器前奏 创建注解 提取标记对象 extractPacakgeClass里面需要完成的事情 获取项目类加载器的目的 为什么不让用户传入绝对路径 类加载器ClassLoader 统一资源定位符URL ClassUtil提取标记类 获取包下类集合 装载目标类的集合 获取…

Git相关使用

私人博客 许小墨のBlog —— 菜鸡博客直通车 系列文章完整版&#xff0c;配图更多&#xff0c;CSDN博文图片需要手动上传&#xff0c;因此文章配图较少&#xff0c;看不懂的可以去菜鸡博客参考一下配图&#xff01; 系列文章目录 前端系列文章——传送门 后端系列文章——传送…

APP UI自动化测试思路总结 ,教你彻底学会APP自动化测试

目录 一&#xff0c;开发语言选择 二&#xff0c;UI测试框架选择 1&#xff0c;Appium 2&#xff0c;Airtest 3&#xff0c;选择框架 三&#xff0c;单元测试框架选择 四&#xff0c;测试环境搭建 1&#xff0c;测试电脑选择 2&#xff0c;测试手机选择 3&#xff0c;…

【Redis】Redis管道

面试题 如何优化频繁命令往返造成的性能瓶颈&#xff1f; Redis是一种基于客户端-服务端模型以及请求/响应协议的TCP服务。一个请求会遵循以下步骤&#xff1a; 客户端向服务端发送命令分四步(发送命令→命令排队→命令执行→返回结果)&#xff0c;并监听Socket返回&#xf…

基于matlab仿真相控天线阵列在波束成形MIMO-OFDM系统中的使用

一、前言 本例显示了相控阵在采用波束成形的MIMO-OFDM通信系统中的使用。它使用通信工具箱和相控阵系统工具箱中的组件&#xff0c;对组成发射器和前端接收器组件的辐射元件进行建模&#xff0c;用于MIMO-OFDM通信系统。使用用户指定的参数&#xff0c;您可以根据不同空间位置和…

Django自动化测试平台搭建落地全过程(附视频教程+源码)

目录 前言 一、平台基础架构设计 二、自动化测试工具选择与集成 三、平台功能开发 四、总结 前言 自动化测试在现代软件开发中扮演着至关重要的角色&#xff0c;它可以显著提高测试效率和准确性&#xff0c;并帮助开发团队更快地发布高质量的软件产品。Django作为一种流行…

Hudi数据湖技术之集成Spark

目录 1 环境准备1.1 安装MySQL 5.7.311.2 安装Hive 2.11.3 安装Zookeeper 3.4.61.4 安装Kafka 2.4.1 2 滴滴运营分析2.1 需求说明2.2 环境准备2.2.1 工具类SparkUtils2.2.2 日期转换星期 2.3 数据ETL保存2.3.1 开发步骤2.3.2 加载CSV数据2.3.3 数据ETL转换2.3.4 保存数据至Hudi…

Flink的DataStreamApi

1.源算子 SourceFunction 并行度只能为1 ParallelSourceFunction 并行度 2.转换算子 &#xff08;1&#xff09;基本类型 所有 Java 基本类型及其包装类&#xff0c;再加上 Void、String、Date、BigDecimal 和 BigInteger。 &#xff08;2&#xff09;数组类型 包括基…

【算法】【算法杂谈】判断点是否在三角形内部(面积法和向量法)

目录 前言问题介绍解决方案代码编写java语言版本c语言版本c语言版本 思考感悟写在最后 前言 当前所有算法都使用测试用例运行过&#xff0c;但是不保证100%的测试用例&#xff0c;如果存在问题务必联系批评指正~ 在此感谢左大神让我对算法有了新的感悟认识&#xff01; 问题介…

netcore工程在linux下调用linux动态库

文章的内容可能看着枯燥&#xff0c;排版也存在一些问题&#xff0c;但是如果你遇到相关问题&#xff0c;真的无法解决的时候&#xff0c;不妨沉下心来好好阅读一下这篇文章&#xff0c;你会有所收获&#xff0c;也可以先跳到文章最后&#xff0c;看看是不是对你的问题有价值。…

Day955.到底是重构,还是重写? -遗留系统现代化实战

到底是重构&#xff0c;还是重写&#xff1f; Hi&#xff0c;我是阿昌&#xff0c;今天学习记录的是关于到底是重构&#xff0c;还是重写&#xff1f;的内容。 到底是重构&#xff0c;还是重写&#xff1f;这是一个困扰着很多团队的问题。 重构吧&#xff0c;遗留系统积重难…

神经网络模型入门及蠓虫分类问题简单实战

学习知识要实时简单回顾&#xff0c;我把学习的神经网络模型简单梳理一下&#xff0c;方便入门与复习。 神经网络模型 神经网络简介 人工神经网络是在现代神经科学的基础上提出和发展起来的&#xff0c;旨在反映人脑结构及功能的一种抽象数学模型。自 1943 年美国心理学家W.M…

【分段DP】ABC275 F

一万年没写DP了 这么简单的DP我居然没写出来 F - Erase Subarrays (atcoder.jp) 题意&#xff1a; 思路&#xff1a; 原本的思路是这样的&#xff1a; 看到3000的数据范围就是n^2的DP了 看到删子串&#xff0c;那么留下来的就是子序列&#xff0c;要使得剩下来的子序列的…

剑指Offer--05替换空格58左旋字符串

文章目录 一、剑指Offer--05.替换空格二、剑指Offer--58.左旋字符串 一、剑指Offer–05.替换空格 题目是这样的 意思是将字符串s中的空格替换为字符串"%20",如果只是替换一个字符还好&#xff0c;可以在原数组直接替换&#xff0c;但是是将空格替换为字符串&#xf…

Vue+Echarts 项目演练(下)收尾工作图表绘制

设置销售总量图表 中心容器地图设置 产品库存统计图 产品类别图表 项目可视化完结-整体展示 设置销售总量图表 在第一个容器中进行图表设置 <template><div><h2>A</h2><div class"chart" id"oneChart">容纳后期的图表…

shell编程规范与变量

shell脚本编程规范 shell脚本概述 将要执行的命令按顺序保存到一个文本文件给该文件可执行权限可结合各种Shell控制语句以完成更复杂的操作 Shell脚本应用场景 重复性操作交互性任务批量事务处理服务运行状态监控定时任务执行 什么是Shell 就是与内核沟通的界面、应用程序等…

[JAVA数据结构]顺序表ArrayList

目录 1.线性表 2.顺序表 3.ArrayList简介 4.ArrayList的使用 4.1ArrayList的构造方法 4.2ArrayList的常用操作 4.3ArrayList的遍历方法 4.4ArrayList的扩容机制 5.ArrayList的具体运用 ArrayList是一种基于数组的数据结构&#xff0c;是线性表的一种&#xff0c;也是…

[NLP]如何训练自己的大型语言模型

简介 大型语言模型&#xff0c;如OpenAI的GPT-4或谷歌的PaLM&#xff0c;已经在人工智能领域掀起了一场风暴。然而&#xff0c;大多数公司目前没有能力训练这些模型&#xff0c;而且完全依赖少数几家大型科技公司作为技术提供者。 在Replit&#xff0c;我们已经大量投资于所需…

linux-01-基础回顾-虚拟机安装linux(centos7)、linux常用命令

文章目录 Linux-Day01课程内容1. 前言1.1 什么是Linux1.2 为什么要学Linux1.3 学完Linux能干什么 2. Linux简介2.1 主流操作系统2.2 Linux发展历史2.3 Linux系统版本 3. Linux安装3.1 安装方式介绍3.2 安装VMware3.3 安装Linux3.4 网卡设置3.5 安装SSH连接工具3.5.1 SSH连接工具…