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

简介: 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 <= 105
  • 1 <= nums[i] <= n

进阶:你能在不使用额外空间且时间复杂度为 O(n) 的情况下解决这个问题吗? 你可以假定返回的数组不算在额外空间内。


思路

  • 方法1:利用map统计数字是否出现过
  • 方法2:本质上是把原数组上对应index的值取负来标识某个值是否出现过


时间复杂度:均为O(n)


空间复杂度:方法1 - O(n),方法2 - O(1)

// // 方法1,利用map统计次数:// 空间复杂度:O(N)// func findDisappearedNumbers(nums []int) []int {//     m := make(map[int]int)//     for i := 0; i < len(nums); i++ {//         m[nums[i]] += 1//     }//     res := make([]int, 0)//     for i := 1; i <= len(nums); i++ {//         if _, ok := m[i]; !ok {//             res = append(res, i)//         }//     }//     return res// }// 方法2,参考:https://www.bilibili.com/video/BV1L34y1j7Rp/?spm_id_from=333.337.search-card.all.click&vd_source=2c268e25ffa1022b703ae0349e3659e4// 本质上是把原数组上对应index的值取负来标识某个值是否出现过// 空间复杂度:O(1)funcfindDisappearedNumbers(nums []int) []int {
fori :=0; i<len(nums); i++ {
nums[MyAbs(nums[i])-1] = (-1) *MyAbs(nums[MyAbs(nums[i])-1]) // 下标从0开始,所以要减一操作    }
res :=make([]int, 0)
fori :=0; i<len(nums); i++ {
ifnums[i] >0 {
res=append(res, i+1)
        }
    }
returnres}
funcMyAbs(aint) int {
ifa<0 {
a*=-1    }
returna}

image.gif


目录
相关文章
|
存储 固态存储 Go
M.2移动硬盘打造Win To Go系统:高效分区存储文件全攻略
【10月更文挑战第11天】Win To Go 是一种将 Windows 系统安装在 M.2 移动硬盘上的技术,便于用户携带自定义系统跨设备使用。需准备高性能 M.2 硬盘及合适硬盘盒,并使用 DiskGenius 或 Rufus 进行分区与系统安装。系统分区用于安装 Windows,其余分区可根据需求存储工作或娱乐文件,便于管理和备份。
1253 2
|
传感器 监控 物联网
什么是物联网卡
物联网卡(IoT SIM卡)是专门为物联网设备提供网络连接的SIM卡,它在物联网技术中扮演着至关重要的角色。以下是对物联网卡的详细解释:
|
小程序 前端开发 Java
毕业设计-基于微信小程序的智能垃圾分类回收系统
毕业设计-基于微信小程序的智能垃圾分类回收系统
|
自然语言处理 前端开发 Linux
在Linux中,什么是 GUI?
在Linux中,什么是 GUI?
|
开发框架 缓存 API
【Uniapp 专栏】通过 Uniapp 构建移动办公应用案例分享
【5月更文挑战第12天】使用Uniapp开发的移动办公应用案例展示了其在提升工作效率和协作上的强大能力。应用涵盖日程管理、任务分配、文件共享、即时通讯等功能,适应跨平台需求,节省开发成本。借助Uniapp的组件和API,打造用户友好的界面,同时确保数据安全和稳定性。优化的界面设计及移动设备适应性,即使在网络不稳定时也能保证基本功能使用。此案例证明Uniapp是构建高效移动办公应用的理想选择,为企业数字化转型赋能。
349 5
|
移动开发 Java Android开发
Android应用开发:Kotlin语言的优势与实践
【5月更文挑战第7天】 在移动开发的世界中,Android平台的Kotlin语言以其高效、简洁的语法和强大的功能吸引了众多开发者。本文将深入探讨Kotlin语言的核心优势,并通过实际案例展示如何在Android应用开发中有效地运用这一现代编程语言。我们将从语言特性出发,逐步分析其在提升开发效率、改善代码质量以及增强应用性能方面的具体表现,为读者提供一个全面而细致的Kotlin应用开发指南。
|
机器学习/深度学习 算法 计算机视觉
m基于Yolov2深度学习网络的智能零售柜商品识别系统matlab仿真,带GUI界面
MATLAB 2022a中展示了YOLOv2目标检测算法的仿真结果,包括多张检测图像。YOLOv2是实时检测算法,由卷积层和全连接层构成,输出张量包含边界框坐标和类别概率。损失函数由三部分组成。程序使用75%的数据进行训练,剩余25%作为测试集。通过ResNet-50预训练模型构建YOLOv2网络,并用SGDM优化器进行训练。训练完成后,保存模型为`model.mat`。
324 2
|
机器学习/深度学习 传感器 人工智能
基于人工智能的自适应交通流量控制系统
【2月更文挑战第30天】 在现代城市管理中,交通拥堵一直是影响居民生活质量和城市可持续发展的关键问题。本文提出了一个基于人工智能技术的自适应交通流量控制系统,旨在通过实时数据分析、模式识别和预测算法来优化交通信号灯调度,减少交通延误,提高道路使用效率。系统采用多层神经网络与深度学习技术进行交通流状态的特征提取和趋势预测,同时结合边缘计算提升响应速度,确保了控制的实时性和准确性。本研究的创新点在于将传统的交通工程方法与最新的AI技术相结合,实现了一个具有自我学习和适应能力的智能交通管理系统。
|
算法 数据挖掘 双11
心相印携肖战开启双11户外营销,瓴羊数智助力高曝光多频次覆盖精准客群
心相印携肖战开启双11户外营销,瓴羊数智助力高曝光多频次覆盖精准客群
241 0