LeetCode算法题-Find All Numbers Disappeared in an Array(Java实现)

5G协议栈逆向工程:基于开源模拟器的核心网信令分析实战 本文详细介绍了基于开源模拟器Free5GC和UERANSIM的5G协议栈逆向工程实战,涵盖核心网信令分析、环境搭建、认证协议解析及安全漏洞验证。通过NGAP/NAS信令交互解密和异常流量注入测试,帮助研究人员深入理解5G网络安全机制,并提供实用的安全加固建议。 阅读详情

这是悦乐书的第232次更新,第245篇原创

01 看题和准备

今天介绍的是LeetCode算法题中Easy级别的第99题(顺位题号是448)。给定一个整数数组,其中1≤a[i]≤n(n =数组的大小),一些元素出现两次,其他元素出现一次。找到[1,n]包含的所有元素,这些元素不会出现在此数组中。你可以在没有额外空间和O(n)运行时的情况下完成吗? 您可以假设返回的列表不计入额外空间。例如:

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

本次解题使用的开发工具是eclipse,jdk使用的版本是1.8,环境是win7 64位系统,使用Java语言编写和测试。

02 第一种解法

特殊情况:当数组中没有元素时,直接返回空list。

正常情况:先将数组排序,然后获取数组的第一个元素作为起始索引index,如果数组第一个元素不等于1,因为1≤a[i]≤n,所以需要先将前面缺的部分补起来。然后开始循环判断数组中的元素,如果index和当前元素相等,那么index自加1,循环内部的指针也加1;反之不相等,则需要判断当前元素和前一个元素是否相等,如果相等,循环内部的指针加1,否则就将index添加进list中,index再自加1。最后,还需要在判断一次,如果index小于数组的长度,则需要将后面缺的数也补起来。

此解法的时间复杂度是O(n log(n)),空间复杂度是O(1)。

public List<Integer> findDisappearedNumbers(int[] nums) {
    List<Integer> list = new ArrayList<Integer>();
    if (nums == null || nums.length < 1) {
        return list;
    }
    Arrays.sort(nums);
    int index = nums[0];
    if (index != 1) {
        for (int k=1; k<index; k++) {
            list.add(k);
        }
    }
    for (int i=0; i<nums.length; ) {
        if (index == nums[i]) {
            index++;
            i++;
        } else {
            if (nums[i] == nums[i-1]) {
                i++;
            } else {
                list.add(index++);
            }
        }
    }
    for (int j = index; j<=nums.length; j++) {
        list.add(j);
    }
    return list;
}

03 第二种解法

利用标记。因为1≤a[i]≤n,我们可以单独再新建一个数组,数组的长度是n+1,然后将nums中的元素作为索引,在新数组中对元素进行自加。然后判断新数组中,那些等于0的元素的索引就是nums中缺失的数。

public List<Integer> findDisappearedNumbers2(int[] nums) {
    List<Integer> list = new ArrayList<Integer>();
    if (nums == null || nums.length < 1) {
        return list;
    }
    int[] temp = new int[nums.length+1];
    for (int num : nums) {
        temp[num]++;
    }
    for (int i=1; i<temp.length; i++) {
        if (temp[i] == 0) {
            list.add(i);
        }
    }
    return list;
}

04 第三种解法

还是利用标记。在第二种解法中,我们使用了新数组,在此解法中,我们直接对nums进行标记。先遍历nums的元素,顺着索引,将其中的正数元素标记为负数。然后再去遍历数组,如果当前元素为正数,则说明其所在索引没有遇见过,就将其添加进list中。

public List<Integer> findDisappearedNumbers3(int[] nums) {
    List<Integer> list = new ArrayList<Integer>();
    if (nums == null || nums.length < 1) {
        return list;
    }
    for (int i = 0; i < nums.length; i++) {
        int val = Math.abs(nums[i]) - 1;
        if (nums[val] > 0) {
            nums[val] = -nums[val];
        }
    }
    for (int i = 0; i < nums.length; i++) {
        if (nums[i] > 0) {
            list.add(i+1);
        }
    }
    return list;
}

05 小结

算法专题目前已日更超过三个月,算法题文章99+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。

以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!

七自由度机械臂逆运动学实战:从几何简化到KDL库高效求解 本文深入探讨了七自由度机械臂逆运动学求解的实战方法。针对冗余自由度带来的挑战,文章对比了两种核心方案:一是利用任务约束进行几何简化,快速求解特定任务;二是基于DH参数法配置KDL库,实现通用高效的数值迭代求解。文中结合宇树H1机器人实例,详细阐述了从模型解析、参数提取到代码实现与验证的全流程,并提供了几何法与KDL库的适用场景对比与避坑指南。 阅读详情

相关推荐

Ubuntu24.04下Librenms的完整安装与配置指南

本文提供了在Ubuntu 24.04 LTS系统上完整安装与配置LibreNMS网络监控系统的详细指南。内容涵盖系统环境准备、依赖安装、源码获取、PHP/数据库/Nginx配置、Composer安装、网页向导设置以及设备添加与日常使用,帮助用户快速部署一套功能强大的开源网络监控解决方案。

tgb3456789的博客 1139

LeetCode(找到所有数组中消失的数字)

然后将下标加1,得到[5,6] ,就跟示例一结果一样。出现的下标为[3,2,1,6,7,1,2,0]元素不消失得到的下标应该为[0,1,2,3,原数组[4,3,2,7,8,2,3,1]时间复杂度O(n),空间复杂度O(1)第一个for循环遍历完之后发现。

jklzbc的博客 523

从放弃到再入门之拉格朗日对偶问题推导

普通同学的解法 无约束条件:求导就可以了 等式约束:代入消元,再求导 不等式约束:分情况讨论(在边界上和不在边界上),分别对应1,2的情况 然而发现,有些情况消元特别复杂,甚至不能求解 聪明同学的解法 发现:在最优点的情况下,约束曲面的法向量和目标函数的梯度反向必相同或相反 拉格朗日乘子法如何理解? (在2维里可以形象的解释为z=f(x,y)在约束条件g(x,y)=c中,极值...

qq_34564612的博客 1万+

Leetcode刷题日记-No448找到所有数组中消失的数字

思路一:引入Hashmap,遍历数组,将元素存入Hashmap,接下来遍历[1,n],找出不存在于Hashmap的元素,追加到结果数组中。代码如下

weixin_38189222的博客 250

BeautyGAN: Instance-level Facial Makeup Transfer with Deep Generative Adversarial Network(2018,妆容迁移)

论文下载地址:BeautyGAN | Proceedings of the 26th ACM international conference on Multimedia 目的:在实例级实现化妆图像和非化妆图像的妆容迁移 方法:全局域集损失和本地实例级损失合并到一个双输入/输出对抗生成网络。步骤:使用一对鉴别器将非化妆面传输到化妆域,鉴别器从域的真实样本中分辨出生成的图像。在域集迁移的基础上,采用基于不同人脸区域的像素级直方图损失来实现实例级迁移。为了保持人脸的一致性和消除伪影,在总体目标函数中加入了.

weixin_53965540的博客 663

miniDP与DP管脚定义差异详解及设计避坑指南

本文详细解析了Mini DisplayPort与标准DisplayPort接口在管脚定义上的核心差异,通过对比表格直观展示了两者20针脚的不同排列方式,特别是高速差分信号线的分布。文章结合真实设计案例,为硬件工程师提供了从原理图设计、PCB布局到信号完整性考量及故障排查的完整避坑指南,强调绝不能将两者视为简单的物理缩小版。

weixin_29248653的博客 362

[LeetCode]Find All Numbers Disappeared in an Array(Java)

这道题我的解法比较单一,采用hash数组的方法,discuss高票的方法采用标记负数的方法,对出现数对应的位置则表记为负数。 我的答案 public class Solution { public List findDisappearedNumbers(int[] nums) { int length = nums.length; int[] h

jsh0123的博客 1321

一种基于频域滤波法消除干扰项与角谱法重构技术的数字全息显微台阶形貌测量实例分析

一种基于频域滤波法消除干扰项与角谱法重构技术的数字全息显微台阶形貌测量实例分析

简单光学 2034

Java实现Find All Numbers Disappeared in an Array

我在leetcode网站上做的算法题,在讨论里找到的好算法,在这里分享一下。     源码如下     import java.util.*; public class Solution { public List findDisappearedNumbers(int[] nums) { List ret = new ArrayList(); 我的基本思想是:先遍历数组,使用 nums[nums[i] -1] = -nums[nums[i]-1] 来将数组元

博客---- 355

STM32使用LORA模块通信

目录 一、模块使用方法 1、模块简介 2、硬件及功能 3、传输方式 二、模块上手 1、连接 2、编写代码 usart3.h usart3.c lora.h lora.c 一、模块使用方法 本文以正点原子ATK-LORA-01模块为例进行介绍。 1、模块简介 ATK-LORA-01-V3.0(V3.0是版本号,下面均以ATK-LORA-01表示该产品)是ALIENTEK推出的一款体积小、微功率、低功耗、高性能远距离LORA无线串口模块。模块设计是采用高效的IS...

qq_54706971的博客 3万+

使用Wireshark抓取用户在网站的登陆密码

(POST请求是浏览器向服务器提交数据的方式,我们的用户名和密码就是这样提交出去的),单击点开,发现我们的账号和密码,就被抓取到了,在。(注意哦,要去掉http和/,比如http://www.4399.com/,我们只需要记下4399.com即可)(这句话是筛选数据,就是只显示IP为我们要抓取网站的数据) ,点击右边的蓝色箭头。这就是Wireshark简单的抓取登录密码的教程,只适用于http协议的网站。”打开,是这个样子,上面的数据先不用管,我们先点击左上角红色的方块停止抓包。,然后回车,得到的IP为。

泡泡的博客 1万+

[leetCode刷题笔记]2017.02.28

448. Find All Numbers Disappeared in an Array 这道题还是用变负号的方法做,和442类似。将每个数应该在的位置所对应的数变为负数,那剩下的正数就是不存在的。遍历一遍往里面加就好了 public class Solution { public List findDisappearedNumbers(int[] nums) { L

WLSK801的博客 269

英飞凌TC3xx之一起认识GTM系列(一)先来认识GTM架构

本文讲述英飞凌TC3xx的通用计时器GTM的架构。

无所适从的我的博客 4598

leetcode 448. Find All Numbers Disappeared in an Array

目录 一、问题描述 二、代码实现 思路一 思路二 https://leetcode.com/problems/find-all-numbers-disappeared-in-an-array/ 给定一个元素值在[1, n]范围的长度为n的整数数组,其元素有的出现两次有的出现一次,找到[1, n]区间中所有没有在数组中出现的元素。要求时间O(n),空间O(1),空间不包括返回的列表...

小景的博客 392

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

448. Find All Numbers Disappeared in an Array && 442. Find All Duplicates in an Array

给定一个整数数组 a,其中1 ≤ a[i] ≤ n (n为数组长度), 有些元素时重复出现的。找出重复出现的元素或者找出缺失的元素,这其实是同一个问题,只是换个说法而已。所以把这两题放到一起整理。 448. Find All Numbers Disappeared in an Array 1. 题目 448. Find All Numbers Disappeared in an Array G...

凌凌小博客 357

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

leetcode 448. Find All Numbers Disappeared in an Array 找到所有数组中消失的数字(简单)

把所有重复出现的位置进行标记,然后再遍历一遍数组,即可找到没有出现过的数字。进一步优化,可以直接对原数组进行标记:把重复出现的数字在原数组出现的位置设为负数,最后仍然为正数的位置即为没有出现过的数。...

ln_ydc的专栏 154

LeetCode-448. Find All Numbers Disappeared in an Array (Java)

Given an array of integers where 1 ≤ a[i] ≤ n (n = size of array), some elements appear twice and others appear once. Find all the elements of [1, n] inclusive that do not appear in this array.

NOadu的专栏 606

448. *Find All Numbers Disappeared in an Array

448. *Find All Numbers Disappeared in an Array https://leetcode.com/problems/find-all-numbers-disappeared-in-an-array/description/ 题目描述 Given an array of integers where 1 ≤ a[i] ≤ n (n = size of array...

珍妮的选择的博客 270

LeetCode448 Find All Numbers Disappeared in an Array(java/python)

题目要求: Given an array of integers where 1 ≤ a[i] ≤ n (n = size of array), some elements appear twice and others appear once.Find all the elements of [1, n] inclusive that do not appear in this array.Co

ncst 1677

leetcode解题之448. Find All Numbers Disappeared in an Array Java版 (找出缺少的数字)

leetcode解题之448. Find All Numbers Disappeared in an Array Java版 (找出缺少的数字)

mine_song的博客 1076

448. Find All Numbers Disappeared in an Array

记录一下leetcode卡了好久的448题目题目Given an array of integers where 1 ≤ a[i] ≤ n (n = size of array), some elements appear twice and others appear once.Find all the elements of [1, n] inclusive that do not appear

沐沐 373

leetcode448 Find All Numbers Disappeared In An Array Java

思路很简单,两次循环。第一次,把nums数组中的值做一定处理当做下标,标记下标(下标其实就是nums数组中的值,出现过的就会被标记。不知道说清楚了没,比如下面这个解法就是把在nums中出现过的下标的值都变成负数了)。 第二次,把标记的下标add到List中。 public List findDisappearedNumbers(int[] nums) { List result = new

店小不二的博客 386

448. 找到所有数组中消失的数字(Find All Numbers Disappeared in an Array)

448. 找到所有数组中消失的数字(Find All Numbers Disappeared in an Array)题解鸽巢思想复杂度分析PythonJava(待完成)鸽巢思想的另一种方式复杂度分析PythonJava(待完成) 题解 第一时间想到一个萝卜一个坑,鸽巢思想。 鸽巢思想 对于题目中1<=nums[i]<=n1<=nums[i]<=n1<=nums[i]...

朱师傅的博客 250

LeetCode 448. Find All Numbers Disappeared in an Array(Java)

原题: Given an array of integers where 1 ≤ a[i] ≤ n (n = size of array), some elements appear twice and others appear once.Find all the elements of [1, n] inclusive that do not appear in this array.Coul

Davy_Joe的博客 826

【LeetCode Top 100】448. Find All Numbers Disappeared in an Array【Easy】【JAVA】

1. 题目 2. 题意 题目很好理解,需要注意的是范围是[1,n],跟数组下标范围[0,n-1]刚好相差了1。 3. 方法一 3.1 思路 由于数字范围刚好大于数组下标范围1,最简单的思路,构造一个大小为n的boolean类型的数组boolean[] isContain,isContain[i]代表数组中是否包含了数字i+1。从头到尾遍历整个数组,对每个值val,将isContian[val-1...

卤小蛋学编程 236

leetcode448 Find All Numbers Disappeared in an Array

package array; import java.util.ArrayList; public class leecode448FindNumbersNotAppear { /*448. Find All Numbers Disappeared in an Array Given an array of integers where 1 ≤ a[i] ≤ n (n = size o...

离镜的博客 415
上一篇: LeetCode算法题-Number of Boomerangs(Java实现)
下一篇: LeetCode算法题-Minimum Moves to Equal Array Elements(Java实现)
程序员小川
博客等级 码龄10年 47粉丝 305原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值