LeetCode题:88合并两个有序数组,283移动零,448找到所有数组中消失的数字

news2025/2/26 2:20:37

目录

88合并两个有序数组

1、题目要求

2、解题思路

(1)、暴力解法:

(2)、双指针,使用第三数组的解法:

3、代码展示

(1)、暴力解法:

(2)、双指针,使用第三数组的解法:

283移动零

1、题目要求

2、解题思路

双指针法:

3、代码展示

448找到所有数组中消失的数字

1、题目要求

2、解题思路

(1)、使用HashSet集合的方法:

(2)、标记数组下标的方法:

3、代码展示

(1)、使用HashSet集合的方法:

(2)、记录数组下标的方法:

都看到这了,点个赞再走呗,谢谢谢谢谢!!!


88合并两个有序数组

1、题目要求

给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。

请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。

注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。nums2 的长度为 n 。

示例 1:

输入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3
输出:[1,2,2,3,5,6]
解释:需要合并 [1,2,3] 和 [2,5,6] 。
合并结果是 [1,2,2,3,5,6] ,其中斜体加粗标注的为 nums1 中的元素。

示例 2:

输入:nums1 = [1], m = 1, nums2 = [], n = 0
输出:[1]
解释:需要合并 [1] 和 [] 。
合并结果是 [1] 。

示例 3:

输入:nums1 = [0], m = 0, nums2 = [1], n = 1
输出:[1]
解释:需要合并的数组是 [] 和 [1] 。
合并结果是 [1] 。
注意,因为 m = 0 ,所以 nums1 中没有元素。nums1 中仅存的 0 仅仅是为了确保合并结果可以顺利存放到 nums1 中。

2、解题思路

(1)、暴力解法:

        因为nums1有m+n个元素,m - 1下标后,都是0,我们直接遍历一遍nums2,把nums2的元素全部依次放到nums1中,再对nums1进行整体排序。

(2)、双指针,使用第三数组的解法:

        我们定义一个新的数组,大小为(m + n),遍历一遍这个数组,定义一个nums1和nums2的下标nums1或nums2谁先遍历完,就要把没遍历完的数组剩下全部元素都放进新的数组中如果两个数组都没遍历完,判断nums1和nums2的下标元素谁小,小的放进新的数组中,同时要更新下标小的那一数组下标

3、代码展示

(1)、暴力解法:

时间复杂度:O(N*logN)使用了快速排序

空间复杂度:O(1)

 public void merge(int[] nums1, int m, int[] nums2, int n) {
        //暴力求法
        for(int i = 0; i < n; i++) {
            nums1[m + i] = nums2[i];
        }
        Arrays.sort(nums1);
    }

(2)、双指针,使用第三数组的解法:

时间复杂度:O(N)

空间复杂度:O(1)

public void merge(int[] nums1, int m, int[] nums2, int n) {
        //定义一个新的数组,这个数组就是我们排完序的数组,把这个数组的元素赋值给数组nums1
        int[] newNum = new int[m + n];
        //遍历nums1和nums2数组,比较这两个数组,谁小先放进新的数组中
        int nums1Index = 0;
        int nums2Index = 0;
        for(int index = 0; index < m + n; index++) {
            if(nums1Index >= m) {
                //nums1遍历完了,把剩下的nums2全部依次放进newNum中
                newNum[index] = nums2[nums2Index++];
            } else if(nums2Index >= n) {
                //nums2遍历完了,把剩下的nums1全部依次放进newNum中
                newNum[index] = nums1[nums1Index++];
            } else if(nums1[nums1Index] < nums2[nums2Index]){
                //nums1和nums2都没遍历完,要进行比较,谁小把谁先放进newNum中
                newNum[index] = nums1[nums1Index++];
            }else{
                newNum[index] = nums2[nums2Index++];
            }
        }
        //把newNum数组元素全部放进nums1中
        for(int i = 0; i < n + m; i++) {
            nums1[i] = newNum[i];
        }
    }


283移动零

1、题目要求

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。

请注意 ,必须在不复制数组的情况下原地对数组进行操作。

示例 1:

输入: nums = [0,1,0,3,12]
输出: [1,3,12,0,0]

示例 2:

输入: nums = [0]
输出: [0]

2、解题思路

双指针法:

时间复杂度:O(N)

空间复杂度:O(1)

        定义i和j下标,i遍历这个数组,同时遍历jj遍历这数组的非零元素,当i遍历完后,j也统计了数组中所有非零元素的个数那么剩下的就都是0元素了,把剩下的0补齐。

3、代码展示

public static void moveZeroes(int[] nums) {
        //双指针法,复杂度O(N)
        //先遍历非零元素,非零遍历完后,剩下的都是0
        int j = 0;
        for(int i = 0; i < nums.length; i++) {
            if(nums[i] != 0) {
                nums[j++] = nums[i];
            }
        }
        //非零遍历完了,剩下的都是0
        for(int i = j; i < nums.length; i++) {
            nums[i] = 0;
        }
    }


448找到所有数组中消失的数字

1、题目要求

给你一个含 n 个整数的数组 nums ,其中 nums[i] 在区间 [1, n] 内。请你找出所有在 [1, n] 范围内但没有出现在 nums 中的数字,并以数组的形式返回结果。

示例 1:

输入:nums = [4,3,2,7,8,2,3,1]
输出:[5,6]

示例 2:

输入:nums = [1,1]
输出:[2]

2、解题思路

(1)、使用HashSet集合的方法:

时间复杂度:O(N)

空间复杂度:O(N)

         定义一个HashSet遍历一遍数组,把数组的元素都放进set里然后再遍历一遍从1~n(nums.length)的数字,判断set里面有没有这范围的值,没有的话就是缺失的数字,因为题目中的方法要求我们返回链表,所以我们定义一个链表,有缺失的数字就添加到链表中,然后再返回这个链表

(2)、标记数组下标的方法:

时间复杂度:O(N)

空间复杂度:O(1)

        我们的目标是找到缺失数字的下标,知道了缺失数字的下标也能知道缺失的数字,题目之间的关系:数字 = 数字的下标 + 1,如何找到缺失数字的下标呢?

        公式:不是缺失数字的下标 =(数字 - 1)% nums.length,上图,我们可以用这个公式,找到不是缺失数字的下标,然后记录下来他们,上面取了负号的都不是缺失数字的下标,所以这个数组中,4下标和5下标是缺失的数字所以缺失的数字就是5(4+1)和6(5+1)其中我们标记可以取负号,但是这数组中有多个相同的数字,那么多次取负也不一定是负数,我们也可以使用另一种标记的方法:不是缺失的数字就+nums.length第一次遍历完后,所有不是缺失数字都>nums.length,我们再用i遍历一次这个数组的时候,只要是<=nums.length的数字,就是缺失的数字缺失的数字就是i+1把他们添加到list链表上,最后再返回这个链表

3、代码展示

(1)、使用HashSet集合的方法:

 public List<Integer> findDisappearedNumbers(int[] nums) {
        //set方法
        List<Integer> list = new LinkedList<>();
        HashSet<Integer> set = new HashSet<>();//定义一个hashset,把nums的所有元素都放进set里
        for(int i = 0; i < nums.length; i++) {
            set.add(nums[i]);
        }
        for(int i = 1; i <= nums.length; i++) {
            if(set.add(i)) {
                list.add(i);
            }
        }
        return list;
    }

 

(2)、记录数组下标的方法:

public List<Integer> findDisappearedNumbers(int[] nums) {
        List<Integer> list = new LinkedList<>();
        int n = nums.length;
        for(int x : nums) {
            //找到x的下标,并记录x下标的值,(x下标值+n)
            int index = (x - 1) % n;
            nums[index] += n;
        }
        //再次遍历nums,nums元素中,<=n的值就是缺失的数字
        for(int i = 0; i < n; i++) {
            if(nums[i] <= n) {
                list.add(i + 1);
            }
        }
        return list;
    }


都看到这了,点个赞再走呗,谢谢谢谢谢!!!

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

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

相关文章

ITSource 分享 第6期【网址云收藏系统】

项目介绍 本期给大家介绍一个 网址云收藏系统.。 你是否因为上网过程中收藏了很多网址找不到而发愁&#xff0c;如果浏览器没有登录账号开启同步的情况下&#xff0c;换个电脑&#xff0c;换个浏览器&#xff0c;以前收藏的网址就找不到了。 本期给大家推荐一个可以在线随时随地…

jmeter BeanShell预处理程序:报错Error invoking bsh method: eval...

1、jmeter运行报错&#xff1a; ERROR o.a.j.u.BeanShellInterpreter: Error invoking bsh method: eval In file: inline evaluation of: " . . . Encountered "" at line 13, column 23. WARN o.a.j.m.BeanShellPreProcessor: Problem in BeanShell scri…

[毕设记录]@学术技能积累:学位论文查询与下载

文章目录 ProQuest国外学位论文中国集团全文检索平台OATD.org&#xff08;Open Access Theses and Dissertations&#xff09;DART-EuropeTUDelft 在上一篇blog里面看的那些论文&#xff0c;感觉看起来收获太小了… 不如去看硕士或者博士的学位论文 于是我先去调研一下哪里方便…

如何将SAP数据集成到任意云平台

十年前就在使用SAP的客户询问我当时突然出现的新事物&#xff1a;大数据。五年前&#xff0c;变成了数据湖和机器学习。现在一切都是关于数据集成&#xff0c;当然还有人工智能。有时处理数据的基本方法已经改变或者发展。有时只是名字的改变。例如&#xff0c;在过去十年中&am…

测试大佬的压箱绝技:教你app 自动化测试如何实现多设备并发

appiumpython appiumpython 实现单设备的 app 自动化测试 启动 appium server&#xff0c;占用端口 4723 电脑与一个设备连接&#xff0c;通过 adb devices 获取已连接的设备 在 python 代码当中&#xff0c;编写启动参数&#xff0c;通过 pytest 编写测试用例&#xff0c;来…

代码审计-锐捷EG易网关 cli.php 远程命令执行

首先登录到后台中(可以组合 锐捷EG易网关 管理员账号密码泄露漏洞) 关键部分代码为 使用 exec 函数执行传递的命令 构造payload&#xff1a; /cli.php?ashell notdelaytrue&commandid漏洞证明&#xff1a; 文笔生疏&#xff0c;措辞浅薄&#xff0c;望各位大佬不吝赐教…

【C语言】内存的动态分配与释放

&#x1f984;个人主页:修修修也 &#x1f38f;所属专栏:C语言 ⚙️操作环境:Visual Studio 2022 ​ 目录 什么是内存的动态分配? 内存动态分配函数 &#x1f38f;malloc() &#x1f38f;calloc() &#x1f38f;realloc() 动态内存释放函数 &#x1f38f;free() 常见的…

轻量封装WebGPU渲染系统示例<5>-多重纹理(源码)

当前示例源码github地址: https://github.com/vilyLei/voxwebgpu/blob/version-1.01/src/voxgpu/sample/MultiTexturedCube.ts 此示例渲染系统实现的特性: 1. 用户态与系统态隔离。 2. 高频调用与低频调用隔离。 3. 面向用户的易用性封装。 4. 渲染数据和渲染机制分离。 …

【2023Mathorcup大数据】B题 电商零售商家需求预测及库存优化问题 python代码解析

【2023Mathorcup大数据】B题 电商零售商家需求预测及库存优化问题 python代码解析 1 题目 2023 年MathorCup 高校数学建模挑战赛——大数据竞赛赛道B&#xff1a;电商零售商家需求预测及库存优化问题电商平台存在着上千个商家&#xff0c;他们会将商品货物放在电商配套的仓库…

ChineseChess1 2023.10.29

中国象棋残局 中国象棋残局模拟器ChineseChess1 2023.10.29 原来圈粉丝&#xff0c;钓鱼&#xff0c;只要不要脸就OK&#xff01;&#xff01;

洛谷趣题【过河卒】参考题解

背景 今天逛洛谷才注意到这道题&#xff0c;原题连接【P1002 [NOIP2002 普及组] 过河卒 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)】 对于爱下棋的我来说&#xff0c;当然是必刷之题。 题意 小卒起始点在左上角(0,0)处&#xff0c;我们的程序将接收两个坐标&#xff1…

解决历史图片创建时间错误(批量修改文件创建时间)

最近在整理历史文件&#xff0c;发现很多历史图片&#xff0c;截图&#xff0c;微信拍照等途径创建的图片没有创建时间和修改时间&#xff0c;导致在相册时间轴错误。集中出现在整理的当天。 这些图片基本在文件名都含有创建时间&#xff0c;大多格式如下&#xff1a; 对于其中…

集成Swagger

基于knife4j集成swagger 集成的步骤 1添加依赖 2配置包扫描 3给每个Controller配置API 4给每个方法&#xff08;接口&#xff09;配置入参、返回值的说明 5针对入参的实体、返回类型VO做配置 添加依赖 <dependency><groupId>com.github.xiaoymin</groupId…

web前端JS基础-----制作进度条

1&#xff0c;参考代码 <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title></head><body><progress id"pro" max"100" value"0"></progress><scrip…

hive 函数使用详解

一、前言 在任何一种编程语言中,函数可以说是必不可少的,像mysql、oracle中,提供了很多内置函数,或者通过自定义函数的方式进行定制化使用,而hive作为一门数据分析软件,随着版本的不断更新迭代,也陆续出现了很多函数,以满足日常数据查询与分析的各种场景。 二、hive 函…

阻塞队列.

目录 ♫什么是阻塞队列 ♫什么是生产-消费者模式 ♫实现一个阻塞队列 ♫BlockingQueue ♫什么是阻塞队列 阻塞队列是一种特殊的队列&#xff0c;它除了具备队列的先进先出的特点外&#xff0c;还具有以下特点&#xff1a; ♩.如果队列为空时&#xff0c;执行出队列操作&#xf…

设计模式:责任链模式(C#、JAVA、JavaScript、C++、Python、Go、PHP)

上一篇《享元模式》 下一篇《解释器模式》 简介&#xff1a; 责任链模式&#xff0c;它是一种行为型设计模式&#xff0c;它将许多对象连接起来形成一条链&#xff0c;每个对象处理不同的请求&#xff0c…

腾讯云轻量应用服务器地域怎么选择比较好?

腾讯云轻量应用服务器地域怎么选比较好?腾讯云轻量应用服务器地域是指轻量服务器数据中心所在的地理位置&#xff0c;如上海、广州和北京等地域&#xff0c;如何选择地域&#xff1f;腾讯云百科txybk.com关于地域的选择建议就近原则&#xff0c;用户距离轻量服务器地域越近&am…

物联网AI MicroPython传感器学习 之 mpu6050六轴陀螺仪传感器

学物联网&#xff0c;来万物简单IoT物联网&#xff01;&#xff01; 一、产品简介 MPU6050是一款6轴运动传感器&#xff0c;它集成了3 轴MEMS 陀螺仪&#xff0c;3 轴MEMS加速度计&#xff0c;以及一个可扩展的数字运动处理器DMP&#xff08;Digital Motion Processor&#xf…

“破解我!“---160个CrackMe练习001-Acid buen.exe

文章目录 前言题目分析破解过程Serial/Name验证方式爆破注册机 追码 Serial验证 前言 想开个系列&#xff0c;160个Crackme的练习&#xff0c;这个在52pojie上有个精华帖总结&#xff0c;写的特别好&#xff0c;推荐&#xff01;写这个系列主要还是记录一下自己的学习记录&…