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

【KDD2024】ShapeFormer:用于多元时间序列分类的Shapelet Transformer 多元时间序列分类(MTSC)因其在现实世界中的广泛应用而吸引了大量研究关注。最近,Transformer在MTSC中取得了先进的性能。然而, 阅读详情

1. 题目

在这里插入图片描述

2. 题意

题目很好理解,需要注意的是范围是[1,n],跟数组下标范围[0,n-1]刚好相差了1。

3. 方法一

3.1 思路

由于数字范围刚好大于数组下标范围1,最简单的思路,构造一个大小为n的boolean类型的数组boolean[] isContain,isContain[i]代表数组中是否包含了数字i+1。从头到尾遍历整个数组,对每个值val,将isContian[val-1]置为true,即标记出现的值。再从头到尾遍历isContain数组,找出哪些下标为false,推断出哪些数字没有出现在[1,n]的范围中。
该方法的时间复杂度为O(n),需要遍历2次数组,空间复杂度为O(n),为boolean数组的开销。

3.2 代码

    public List<Integer> findDisappearedNumbers(int[] nums) {
        boolean[] isContain = new boolean[nums.length];
        for (int num : nums
                ) {
            isContain[num - 1] = true;
        }
        
        List<Integer> response = new ArrayList<>();
        for (int i = 0; i < nums.length; i++) {
            if (!isContain[i]) {
                response.add(i + 1);
            }
        }
        return response;
    }

3.3 运行结果

在这里插入图片描述

4. 方法二

4.1 思路

对于方法一,运行速度快,但没有实现空间复杂度为O(1),接下来考虑保持时间复杂度不变O(n),降低空间复杂度。
考虑方法一,我们的空间开销是在boolean数组上,它的作用在于记录哪些值已经出现过了,因此我们考虑能否使原数组也有记录值是否出现的能力。联想到一个简单的方法,正负值,我们可以当某个值出现时,我们修改原数组的值的正负,来标记该值是否已经出现。
例如对于[3,3,2]数组,我们从头遍历,第一个数字的绝对值为3,将3-1=2下标对应的值修改为负,原数组变为[3,3,-2],对于第二个数,同样绝对值为3,将3-1=2下标对应的值修改为负,原数组为[3,3,-2],遍历第三个数,绝对值为2,将2-1=1下标对应的值改为负,原数组为[3,-3,-2],从头遍历数组,发现只有下标为0的数为正,即该数组中不包含0+1=1,不包含1这个数。

4.2 代码

    public List<Integer> findDisappearedNumbers1(int[] nums) {
        for (int i = 0; i < nums.length; i++) {
            int temp = Math.abs(nums[i]) - 1;
            if (nums[temp] > 0) {
                nums[temp] = -nums[temp];
            }
        }
        List<Integer> response = new ArrayList<>();
        for (int i = 0; i < nums.length; i++) {
            if (nums[i] > 0) {
                response.add(i + 1);
            }
        }
        return response;
    }

4.3 运行结果

在这里插入图片描述

5. 相关链接

本题代码的github链接
其他 LeetCode 题目解析

STM32F103C8T6+TB6612驱动直流电机全攻略(附PWM调速代码) 本文提供了一份基于STM32F103C8T6微控制器和TB6612驱动模块的直流电机驱动完整解决方案。详细解析了硬件连接、STM32CubeMX配置、HAL库驱动代码编写,并附带了PWM调速代码实现。内容涵盖从基础原理到实战调试的全过程,旨在帮助开发者快速构建稳定、可精准调速的电机控制系统,适用于智能车、机器人等嵌入式项目。 阅读详情

相关推荐

EndNote全文检索实战:如何快速配置学校图书馆资源并精准查找文献

本文详细介绍了EndNote全文检索功能的实战配置方法,核心在于通过正确设置OpenURL链接解析器,无缝对接学校图书馆资源,实现一键精准获取文献全文。文章提供了从理解机制、四步配置法到进阶技巧的完整指南,帮助科研人员高效管理海量PDF,构建个人知识体系,大幅提升文献调研与写作效率。

weixin_29228781的博客 278

LeetCode Top 100 Liked Questions 448. Find All Numbers Disappeared in an Array (Java版; Easy)

welcome to my blog LeetCode Top 100 Liked Questions 448. Find All Numbers Disappeared in an Array (Java版; Easy) 题目描述 Given an array of integers where 1 ≤ a[i] ≤ n (n = size of array), some elements ap...

littlehaes的博客 195

UVM实战 卷I学习笔记1——简单的UVM验证平台:只有driver

目录验证平台的组成最简单的验证平台——只有driverUVM如何搭建driver:加入factory机制加入objection机制加入virtual interface 个人《UVM实战卷I》学习随手笔记,此书作者:张强 验证平台的组成 一个验证平台要实现的基本功能: 模拟DUT的各种真实使用情况——给DUT施加各种激励→driver实现激励功能; 根据DUT的输出判断DUT行为是否与预期符合→scoreboard(也称为checker)——需注意判断的东西和判断的标准是什么; 收集DUT的输出并传递

weixin_41979380的博客 3889

【LeetCode 1024】视频拼接 Video Stitching

题目: 题意为:用一个chips[][]数组来记录一些视频片段,chips[i][0]记录开始时间,chips[i][1]记录结束时间,给定一个最终要到达的时间点,求判断给定的视频片断,能否拼凑到要求的时间点,如果能到达,问最少需要多少个视频片段可以完成。 举例: 举例部分,例如第三个例子,里面的视频碎片中,选取[0,4]、[4,7]、[6,9]这三个片段,刚好可以到达时间点 9,因此需要的最...

卤小蛋学编程 9427

立创开源桌面激光雕刻机DIY全解析:从悬臂结构、Arduino主控到Marlin固件

本文详细解析了基于立创开源平台的桌面激光雕刻机DIY全过程。重点介绍了悬臂式机械结构的设计与优化,阐述了采用Arduino Mega 2560主控与RAMPS 1.4扩展板的经典控制方案,并深入讲解了Marlin固件的关键配置步骤,包括电机步数计算与激光功能启用,为创客和电子爱好者提供了一套完整的从硬件搭建到软件调试的实战指南。

weixin_42510201的博客 381

Keil v5.11给STM32烧录程序记录

1)安装KeilMDK511 2)安装ST Link下载器驱动 3)打开Keil v5,加载工程文件 4)load pack(Keil.STM32F1xx_DFP.1.1.0和Keil.STM32F0xx_DFP.1.2.0) 5)编译程序- 0 Error(s), 0 Warning(s). 6)烧录程序 ...

守望的距离 6281

树、二叉树的前中后层序遍历(递归、非递归Java实现)

文章目录1. 二叉树的前中后序遍历(递归,非递归)以及层序遍历1.1 二叉树前中后遍历的递归解法1.2 二叉树前中后遍历的非递归解法1.2.1 非递归的前序遍历:(LeetCode 144)1.2.2 非递归的中序遍历:(LeetCode 94)1.2.3 非递归的后序遍历:(LeetCode 145)1.3 层序遍历:(LeetCode 102、103、107)2 树的前中后层序遍历2.1 前序...

卤小蛋学编程 5077

别再手动写用例了!用AI Agent自动生成测试用例的保姆级实战(附Python代码)

本文详细介绍了如何利用AI Agent技术自动生成测试用例,大幅提升测试工程师的工作效率。通过Python代码实战演示,从环境搭建到核心Agent构建(需求解析、场景挖掘、用例编排),再到与企业工具链(TestRail、Jira)的深度集成,帮助团队实现测试用例的智能化生成与管理。

weixin_30897233的博客 645

LeetCode 有关树深度、路径的题目(JAVA代码实现)

文章目录1. 路径相关的题目112.路径总和113.路径总和 II437.路径总和 III124.二叉树中的最大路径和257.二叉树的所有路径2. 深度相关的题目111.二叉树的最小深度559.N叉树的最大深度834.树中距离之和863.二叉树中所有距离为 K 的结点865.具有所有最深结点的最小子树3. 其他长度相关的题目543.二叉树的直径563.二叉树的坡度662.二叉树最大宽度 1. 路径...

卤小蛋学编程 1075

从AMCL到SLAM Toolbox:在Nav2中实现高精度纯定位的实践指南

本文详细介绍了从AMCL迁移到SLAM Toolbox纯定位模式的实践指南,帮助开发者在Nav2中实现高精度定位。通过对比AMCL与SLAM Toolbox的性能差异,提供环境配置、参数调优、Nav2集成等关键步骤,显著提升机器人在动态环境中的定位精度和重定位效率。

weixin_29292535的博客 147

【Unity实战篇】 接入百度翻译,实现文本自动翻译功能

日常在做项目的过程中,游戏本地化几乎已经成为必不可少的一步。 本篇文章将演示怎样在Unity中接入百度翻译,实现文本自动翻译的功能。

努力前行,总会成为自己心中的那道光 9059

【LeetCode 105 106 889】重建二叉树(给定树的前中后序遍历方式中的两种来重建二叉树)

树的常见遍历方式有:前序遍历,中序遍历,后序遍历,层序遍历,关于这些遍历方式的递归和非递归实现:https://blog.csdn.net/Applying/article/details/84982712 现在,如果给定前中后序遍历方式中的两种,如何重建二叉树呢? 文章目录从前序和中序遍历构建二叉树从后序和中序遍历构建二叉树从前序和后序遍历构建二叉树 从前序和中序遍历构建二叉树 这个是三种情况中...

卤小蛋学编程 1006

为什么 ADT 在 SAP BTP ABAP environment 里认证成功却无法登录 Service Instance:根因拆解与一站式修复路线

摘要 ADT报错"认证成功但Service Instance登录失败"通常源于ABAP租户的权限或用户映射问题,而非账号密码错误。常见原因包括:1) ABAP租户内未创建对应业务用户;2) 业务用户缺少开发角色(如SAP_BR_DEVELOPER);3) BTP角色集合未分配或IdP组映射缺失;4) 浏览器会话混淆身份;5) 连接了非开发租户(如Customizing Tenant);6) 实例休眠导致误判。 解决方法:检查ABAP业务用户及角色分配,确认BTP角色集合映射,使用隐身窗口

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 252

【LeetCode 89】格雷编码 构建法和自然二进制编码转化法

题目: 格雷编码是一个二进制数字系统,在该系统中,两个连续的数值仅有一个位数的差异。 给定一个代表编码总位数的非负整数 n,打印其格雷编码序列。格雷编码序列必须以 0 开头。 解题: 首先,补充一下格雷码的含义:在一组数的编码中,若任意两个相邻的代码只有一位二进制数不同,则称这种编码为格雷码。例如,位数为2格雷码的其中一个序列:00,01,11,10,它们任意两个相邻的数值,只有一个位数不同。 ...

卤小蛋学编程 1003

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

链表相关题目总结(含leetcode链表题Java代码)

链表是最常见的数据结构之一,下面主要总结题目,不涉及基本的数据结构的介绍 文章目录1. 常见的链表操作题目1.1 链表倒置(leetcode 206)1.2 两个有序链表的合并(leetcode 21)2. leetcode 其他相关题目No.83 Remove Duplicates from Sorted ListNo.237 Delete Node in a Linked List (删除链...

卤小蛋学编程 883

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

【LeetCode 983】门票的最低费用 Minimum Cost For Tickets

题目: 即,给定一个数组代表你一年中的什么时候会去电影院,给定另外一个数组代表一日票,七日票,跟三十日票的金额,要求出如何买票,才能使花费最少。 思路: 明显看出这个是一个动态规划的题目,因此我需要两步曲来完成,首先是状态的定义,我们发现,比如 days[1,2,3,5],我们要输出的是第5天所花费的最少金额,而且 days是严格递增的,所以我们只要求出第days[days.length - ...

卤小蛋学编程 733

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

【LeetCode 1014】最佳观光对 Best Sightseeing Pair

LeetCode 1014题,属于数组类型的题目,题意: 翻译成中文,就是要找数组中的两个点,满足: A[i] + A[j] + i - j的值最大 且 i < j 思路: 最快速的想法,就是直接暴力求解: 因为实际上就是求符合题意的两个点能获得的最大值,直接两个循环: public int maxScoreSightseeingPair(int[] A) { ...

卤小蛋学编程 622

【LeetCode 136 137 260】 只出现一次的数字Ⅰ、Ⅱ、Ⅲ (Single Number)

LeetCode 第136、137、260刚好都是同一类型的题目:只出现一次的数字,放在一起进行整理 文章目录136. 只出现一次的数字Ⅰ137. 只出现一次的数字Ⅱ260. 只出现一次的数字Ⅲ 136. 只出现一次的数字Ⅰ 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。 说明: 你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗...

卤小蛋学编程 599

【LeetCode 45 55 1306】Jump Game I,II,III【JAVA】

跳跃游戏,合计三道题。 55. Jump Game 1. 题目 运行结果 45. Jump Game II 1. 题目: 运行结果 运行结果 1306. Jump Game III 1. 题目 运行结果

卤小蛋学编程 414

【LeetCode Top 100】56. Merge Intervals【Medium】【JAVA】

1. 题目 2. 题意 题目很好理解,就是输入多个时间碎片,现在需要尽可能把碎片进行合并,求合并后的结果。 3. 思路 一个比较容易想到的思路,维护一个当前的合并之后的时间碎片组,通过遍历所有的时间碎片,不断向合并之后的时间碎片组加入新的时间碎片,并将其进行合并整理即可。最佳的时间复杂度为O(n),即每次加入的碎片都可以进行合并,维护的合并之后的时间碎片组永远只有一个碎片。最差的时间复杂度为O(...

卤小蛋学编程 391

【LeetCode】Best Time to Buy and Sell Stock Ⅰ、Ⅱ、Ⅲ【Java】

121. Best Time to Buy and Sell Stock 题意为只可买入一次,并卖出一次,要求获取的利润最高。最简单的思路就是两层循环,比较每一个数与后面的数的差值,以求出当前能获取的最大差值,即为最大利润,算法的时间复杂度即O(n²)。我们可以考虑优化算法,我们每获取一个数时,我们其实只需要跟这个数之前最小的那个数做比较,就可以知道这个为出口时,能获取的最大利润值,再通过比较所...

卤小蛋学编程 374

【LeetCode Top 100】406. Queue Reconstruction by Height【Medium】【JAVA】

1. 题目 2. 题意 有 n 个 (h, k) 对,h 代表高度,k 代表这个对在队列中的位置,在它的位置前面,有 k 个对的高度,比它高或等高。例如 (7, 0),代表其高度为 7,在它前面有 0 个高度不小于它的对。(4, 4) 代表其高度为 4,在它前面有 4 个高度不小于它的对。 3. 思路 这道题,官方的提示是: 让你去找出最小高度的数的位置。 首先,我们先假设没有相同高度的对存在...

卤小蛋学编程 366

【LeetCode 1358】Number of Substrings Containing All Three Characters【Medium】【JAVA】

1. 题目 2. 题意 题目几个关键信息: 该字符串只包含’a’,‘b’,'c’三种字符 示例1中发现对于相同但是位置不同的子串,是按两个结果计算,无需去掉重复 该字符串长度默认大于3 3. 方法 3.1 思路 最简单的思路就是暴力法,直接两个循环,并判断结果字符串是否都包含了’a’,‘b’,'c’三种字符。但该方法时间复杂度较高,O(n²),因此考虑有没有简单的做法。 题目是求符合条件的子...

卤小蛋学编程 357

【LeetCode 225】用一个or两个队列实现栈

Implement Stack using Queues

卤小蛋学编程 340

LeetCode Hot 100 二叉树专题(二)3 题(Java)

本篇文章共 3 题:543. 二叉树的直径、102. 二叉树的层序遍历、108. 将有序数组转换为二叉搜索树。 每道题都统一按「① 题目分析 & 解题思路 → ② 常见解法(附代码)及讲解 → ③ 知识点总结」的顺序组织;代码使用 Java 编写,节点定义沿用 LeetCode 默认的 TreeNode。

2401_88612756的博客 352

LeetCode Hot 100 链表专题 三· 3 题(Java)

收录题目:2. 两数相加、19. 删除链表的倒数第 N 个结点、24. 两两交换链表中的节点。 统一结构:① 题目分析与解题思路 → ② 常见解法(附代码)及讲解 → ③ 知识点总结。 贯穿三题的两条主线:虚拟头结点 dummy(统一处理头结点被修改的场景)与 指针修改顺序(避免断链、丢引用)。

2401_88612756的博客 481
上一篇: 【LeetCode Top 100】647. Palindromic Substrings【Medium】【JAVA】
下一篇: 【LeetCode 1305】All Elements in Two Binary Search Trees【Medium】【JAVA】
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值