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

Java实现 LeetCode 448 找到所有数组中消失的数字 448. 找到所有数组中消失的数字 给定一个范围在 1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次。 找到所有在 [1, n] 范围之间没有出现在数组中的数字。 您能在不使用额外空间且时间复杂度为O(n)的情况下完成这个任务吗? 你可以假定返回的数组不算在额外空间内。 示例: 输入: [4,3,2,7,8,2,3,1] 输出: [5... 阅读详情

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

示例 1:
输入:nums = [4,3,2,7,8,2,3,1]
输出:[5,6]
解题思路:

如果没有限制空间复杂度,本题整体不难,我们可以利用HashSet解决。但是如何在不使用额外空间且时间复杂度为 O(n) 的情况下解决这个问题?

  1. 当前元素是 nums[i],那么我们把第 Math.abs(nums[i]) - 1 位置的元素乘以 -1,表示这个原位置的 i 出现过。
  2. 最后,对数组中的每个位置遍历一遍,如果 i 位置的数字是正数,说明 i + 1 未出现过。
    即使用数组的下标来标记数字的出现于否,通过一遍遍历即可标记出全部已经出现的数组
举例说明
  [4,3,2,7,8,2,3,1] 初始数据
 
  [4,3,2,-7,8,2,3,1] 第一个数据 4 出现,将数组的第四个也就是下标 3 的数据修改为负数。-7 计算时,通过绝对值处理一下即可不影响数据的计算
  [4,3,-2,-7,8,2,3,1]
  [4,-3,-2,-7,8,2,3,1]
  [4,-3,-2,-7,8,2,-3,1]
  [4,-3,-2,-7,8,2,-3,-1]
  [4,-3,-2,-7,8,2,-3,-1]
  [4,-3,-2,-7,8,2,-3,-1]
  [-4,-3,-2,-7,8,2,-3,-1]
 
计算结束,数组的第五个,第六个依然为整数,证明 5,6 没有出现
代码:
class Solution {
    public List<Integer> findDisappearedNumbers(int[] nums) {
        List<Integer> ans = new ArrayList<>();
        for(int i = 0; i < nums.length; i++) {
            // 把相应的nums中的数对应的-1下标位置,乘以-1
            if(nums[Math.abs(nums[i]) - 1] > 0) {
                nums[Math.abs(nums[i]) - 1] *= -1;
            }
        }

        for(int i = 0; i < nums.length; i++) {
            if(nums[i] > 0) {
                ans.add(i + 1);
            }
        }
        return ans;
    }
}

时间复杂度为 O(N)
空间复杂度为 O(1)

子图同构之乌尔曼算法Ullmann Algorithm的python实现 给定两个图Ga​(子图)和Gb​(原图),其中Ga​有pa​个点和qa​条边,Gb​有pb​个点和qb​条边,其邻接矩阵分别为A和B。子图同构的关键在于找到一种从Ga​的点到Gb​的点的映射MM是一个pa​行pb​列的矩阵,且满足每行只有一个1(表示Ga​中的一个点唯一地映射到Gb​中的一个点),每列至多一个1(确保Gb​中的点不会被重复映射)。定义Ccij​MMBT,若在图Ga​。 阅读详情

相关推荐

告别环境报错:用Pycharm一站式搞定Superset 3.0.0二次开发环境(Windows/Mac通用)

本文详细介绍了如何使用Pycharm一站式搭建Apache Superset 3.0.0的二次开发环境,涵盖Windows和Mac平台。通过虚拟环境配置、依赖管理、数据库初始化及前后端协同开发等步骤,帮助开发者高效解决环境报错问题,提升开发效率。特别适合需要进行Superset二次开发的工程师参考。

weixin_42549496的博客 316

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

Leetcode 448. 找到所有数组中消失的数字1、问题分析2、问题解决3、总结 1、问题分析 题目链接:https://leetcode-cn.com/problems/find-all-numbers-disappeared-in-an-array/ 具体思路是: 如果是 for 循环过来的,先不更改数组的值, 如果是递归过来的则更改为 0。 更改数组的值之后,再去更改以数组的值为下标的 数组的值, 这样只要在数组中出现的值,一定会被改成 0   代码我已经进行了详细的注释,理解应该没有问题,读

珍惜 8977

CS231n+assignment2(一)

cs231n作业二详解+代码

qq_56551150的博客 2411

leetcode第448题.找到所有数组中消失的数字

448. 找到所有数组中消失的数字 题目题解一:使用额外空间进行桶排序题解二:原地修改(进阶) ) 题目 给你一个含 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] 提示: n == nums.length 1 <= n <= 1

m0_51456787的博客 7328

基于 YOLO + SAM 的自动图像标注实战

摘要: 本文提出一种基于YOLO检测和SAM分割的自动化数据标注流水线方案,通过YOLO定位目标并生成检测框,再以检测框为提示驱动SAM完成精细分割,最终输出YOLO格式的标注文件。该方案将人工标注升级为半自动流程,显著提升标注效率,尤其适用于多类别、大规模图像的实例级标注需求。代码模块化设计支持模型灵活替换,并集成异常处理与进度可视化功能。虽依赖YOLO检测质量且对小目标存在局限,但作为工程落地方案,可有效降低私有数据集构建成本,适用于工业检测、遥感等场景的冷启动标注。

qq_64366203的博客 1149

NAS新玩法!豆瓣与迅雷结合,轻松实现自动下载电影自动追剧功能

NAS新玩法!豆瓣与迅雷结合,轻松实现自动下载电影自动追剧功能

XiaoqiangClub的博客 6395

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

力扣448 找到所有数组中消失的数字 题干 给定一个范围在 1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次。 找到所有在 [1, n] 范围之间没有出现在数组中的数字。 您能在不使用额外空间且时间复杂度为O(n)的情况下完成这个任务吗? 你可以假定返回的数组不算在额外空间内。 示例 输入: [4,3,2,7,8,2,3,1] 输出: [5,6] 解析 说一下本人怎么理解本题的。 首先给定数组长度为n ,正常来说是可以满足 数字

Castle Yeager 成长之路 373

Open3D (C++) 点云边界提取【2025最新版】

Compute the boundary points of a point cloud.The implementation is inspired by the PCL implementation. Reference:https://pointclouds.org/documentation/classpcl_1_1_boundary_estimation.html

点云侠的博客 872

力扣(LeetCode)448. 找到所有数组中消失的数字

给定一个范围在 1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次。 找到所有在 [1, n] 范围之间没有出现在数组中的数字。 您能在不使用额外空间且时间复杂度为O(n)的情况下完成这个任务吗? 你可以假定返回的数组不算在额外空间内。 示例: 输入: [4,3,2,7,8,2,3,1] 输出: [5,6] java版 可以定义一个长为n...

weixin_30685047的博客 216

【量化入门】Tushare库获取公募基金的历史净值

在本文中,我们将介绍如何使用Python的Tushare库获取公募基金的历史净值。

木头大左的博客 1145

UG NX二次开发(C++)-库缺少需要的入口点的原因与解决方案

在UG NX二次开发过程中,有时会遇到形形色色的bug,比如有个读者其采用UG NX二次开发(C++)时,遇到“库缺少需要的入口点”这个问题,看了一下他发给我的源代码,感觉有必要讲一下UG NX二次开发(C++)遇到此类问题的可能情况与解决方法。自然,这是博主的经验之谈,有不足之处还请在评论区讨论。

GimiGimmy 2202

Leetcode(448)——找到所有数组中消失的数字

Leetcode_448——找到所有数组中消失的数字 题目 题解 方法一:鸽笼原理(The Pigeonhole Principle)+交互元素到对应下表索引上 思路 ​  由题目知,nums 且 nums 中的数字一定属于 [1, n]。所以可以在第一个 for 循环中让 nums[i] 加上特定次数的 nums.size() 。而 nums[i] 加 nums.size() 的次数等于数组 nums 中 i+1 值的个数。 ​  至于为什么是加 nums.size() ,是为了后续的判断。在最后一次

KCDCY的博客 698

[系统安全] 十一.那些年的熊猫烧香及PE病毒行为机理分析

如果你想成为一名逆向分析或恶意代码检测工程师,或者对系统安全非常感兴趣,就必须要认真分析一些恶意样本。熊猫烧香病毒就是一款非常具有代表性的病毒,当年造成了非常大的影响,并且也有一定技术手段。本文将详细讲解熊猫烧香的行为机理,并通过软件对其功能行为进行分析,这将有助于我们学习逆向分析和反病毒工作。后续作者还将对其进行逆向调试,以及WannaCry勒索蠕虫、各种恶意样本及木马的分析。基础性文章,希望您喜欢!同时,本文部分实验参考姜晔老师的视频分析,真的非常佩服和值得去学习的一位老师。技术路上哪有享乐,为了提升安

杨秀璋的专栏 7328

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

题目: 448. 找到所有数组中消失的数字 - 力扣(LeetCode) (leetcode-cn.com) 思路一:排序 分析: 找到所有在 [1, n] 范围之间没有出现在数组中的数字,将数组进行排序,然后查找前后的数相差是否为0或者1,如果不满足,则存在没有出现过的数字。尤其注意开头和最后一个元素,首元素是否为1,最后一个元素是否等于长度 步骤: 将数组进行排序 判断首元素是不是1,不为1,就将【1,nums[0]】之间的数存入数组 遍历数组,判断前后元素是不是相差0或1,不是,就将两个元

蜀沐的博客 226

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

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

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

448.力扣LeetCode_找到所有数组中消失的数字

文章摘要:该算法通过将输入数组本身作为哈希表来高效查找1~n范围内缺失的数字。核心思路是:遍历数组时,将每个元素值映射为数组下标,并将对应位置的元素加上n作为标记;再次遍历时,未被标记的位置即为缺失数字。最后恢复数组原值。时间复杂度O(n),空间复杂度O(1)(不包括返回数组)。关键步骤包括:1) 原地哈希标记;2) 收集未标记的缺失值;3) 还原原始数组。这种方法避免了额外空间使用,实现了最优解。

2401_82472941的博客 568

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

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

leetcode 448.找到所有数组中消失的数字 题目描述 给定一个范围在 1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次。 找到所有在 [1, n] 范围之间没有出现在数组中的数字。 您能在不使用额外空间且时间复杂度为O(n)的情况下完成这个任务吗? 你可以假定返回的数组不算在额外空间内。 示例: 输入: [4,3,2,7,8,...

EngineerHe的博客 644

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

《LeetCode力扣练习》第448题 找到所有数组中消失的数字 Java

《LeetCode力扣练习》第448题 找到所有数组中消失的数字 Java 一、资源 题目: 给你一个含 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] 提示: n == nums.length 1 <= n <= 105

XRT_knives的博客 475

[Golang]力扣Leetcode - 448. 找到所有数组中消失的数字(哈希)

[Golang]力扣Leetcode - 448. 找到所有数组中消失的数字(哈希)

皮埃尔的博客 387

#力扣 LeetCode448. 找到所有数组中消失的数字 @FDDLC

题目描述: 448. 找到所有数组中消失的数字 - 力扣(LeetCode) (leetcode-cn.com) Java代码: class Solution { public List<Integer> findDisappearedNumbers(int[] a) { List<Integer> ans=new LinkedList<>(); int mod=a.length+1; for(int .

LiuXingchang的博客 343

力扣第448题:找到所有数组中消失的数字

学习目标: 写了快两个星期力扣了,记录一下自己的力扣生活 学习内容: 力扣448. 找到所有数组中消失的数字 给定一个范围在 1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次。 找到所有在 [1, n] 范围之间没有出现在数组中的数字。 您能在不使用额外空间且时间复杂度为O(n)的情况下完成这个任务吗? 你可以假定返回的数组不算在额外空间内。 示例: 输入: [4,3,2,7,8,2,3,1] 输出: [5,6] 来源:力扣(LeetCode

童一的博客 202

《LeetCode刷题》—448. 找到所有数组中消失的数字

《LeetCode刷题》—448. 找到所有数组中消失的数字

小贺想改变 685

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

Leetcode 448.找到所有数组中消失的数字 题目: 给定一个范围在 1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次。 找到所有在 [1, n] 范围之间没有出现在数组中的数字。 您能在不使用额外空间且时间复杂度为O(n)的情况下完成这个任务吗? 你可以假定返回的数组不算在额外空间内。 示例: 输入: [4,3,2,7,8,2,3,1] 输出: [5,6] 题解一: /** * * 找出 1 - n 中没有出现的数字

qq_33894488的博客 206

力扣leetcode之Java刷题448找到所有数组中消失的数字

力扣leetcode之Java刷题

小李子Lee 271

Leetcode刷题(448. 找到所有数组中消失的数字)

Leetcode刷题(448. 找到所有数组中消失的数字)一.题目二.代码(C)方法一方法二三.提交记录方法一方法二四.备注 一.题目 给定一个范围在 1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次。 找到所有在 [1, n] 范围之间没有出现在数组中的数字。 您能在不使用额外空间且时间复杂度为O(n)的情况下完成这个任务吗? 你可...

Umbraner的博客 440

leetcode448. 找到所有数组中消失的数字

leetcode448. 找到所有数组中消失的数字 给定一个范围在 1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次。 找到所有在 [1, n] 范围之间没有出现在数组中的数字。 您能在不使用额外空间且时间复杂度为O(n)的情况下完成这个任务吗? 你可以假定返回的数组不算在额外空间内。 示例: 输入: [4,3,2,7,8,2...

peony的博客 245

力扣(leetcode)第448题找到所有数组中消失的数字(Python)

给你一个含 n 个整数的数组 nums ,其中 nums[i] 在区间 [1, n] 内。请你找出所有在 [1, n] 范围内但没有出现在 nums 中的数字,并以数组的形式返回结果。最后,我写了一篇MySQL教程,里面详细的介绍了MySQL的基本概念以及操作指令等内容,欢迎阅读!输入:nums = [4,3,2,7,8,2,3,1]输入:nums = [1,1]

qq_58737789的博客 673
上一篇: LeetCode 628-三个数的最大乘积
下一篇: LeetCode 611-有效三角形的个数
Guo_Chuang
博客等级 码龄6年 9粉丝 61原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值