题目

给你一个含 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 <= 10^5
1 <= nums[i] <= n
进阶:你能在不使用额外空间且时间复杂度为 O(n) 的情况下解决这个问题吗? 你可以假定返回的数组不算在额外空间内。
来源:力扣(LeetCode)

解题思路

  题目要求查找缺失的数字,首先可以准备一个完整的序列然后逐一对比序列中的值是否在nums中,如果不在则当前值便是缺失的值。这样做的时间复杂度的量级便跑到了O(n^2),所以需要先哈希一下原数组。

class Solution:def findDisappearedNumbers(self, nums: List[int]) -> List[int]:n=set(nums)temp=[]for i in range(1,len(nums)+1):if i not in n:temp.append(i)return temp


  另外题目给出了进阶的建议,原地完成算法。想要原地空间就必须充分挖掘数组中的元素和下标的关系,在这个题目中,如果我们正常访问能访问到所有的元素,而我们以元素为下标访问数组则会有重复访问的和不能访问到的元素,如果以颠倒元素值和下标为映射关系如何标记已经访问过的元素呢?再开辟一个数组显然不符合要求,直接访问并修改元素值以用来标记又会影响后续的访问。现在似乎需要这样的一个函数;当访问前面元素的时候更改掉以当前元素为下标的元素的值,当访问到被更改的元素的时候,能够还原它原来的值以便找到真正的映射下标,也就是一个函数两次作用于同一个数值是要能回到最初的状态的,这样的函数有求倒数,添负号,加一个足够大的数然后再减去这个数,乘以一个足够大的数然后再除以这个数…;求这个题不能用倒数,因为遇到1会有一些问题。由于这个题目最大值有上限,我们就利用加一个足够大的数。

class Solution:def findDisappearedNumbers(self, nums: List[int]) -> List[int]:n=len(nums)+1  #设置足够大的数for i in nums:  #对应的映射规则if i<n:if nums[i-1]<n:nums[i-1]+=nelse:if nums[i-1-n]<n:nums[i-1-n]+=ntemp=[]for i in range(len(nums)):if nums[i]<=len(nums):temp.append(i+1)return temp

LeetCode简单题之找到所有数组中消失的数字相关推荐

  1. ★LeetCode(448)——找到所有数组中消失的数字(JavaScript)

    给定一个范围在 1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次. 找到所有在 [1, n] 范围之间没有出现在数组中的数字. 您能在不使 ...

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

    <LeetCode力扣练习>第448题 找到所有数组中消失的数字 Java 一.资源 题目: 给你一个含 n 个整数的数组 nums ,其中 nums[i] 在区间 [1, n] 内.请你 ...

  3. 找到所有数组中消失的数字_【一点资讯】千万程序员的呼声:面试如何拿到大厂Offer?这份阅读量超过11W+的算法刷题宝典请你原地查收 www.yidianzixun.com...

    如何才能通过面试拿到大厂Offer? "刷leetcode!" 这是我听到最多的回答! 现在越来越多的人应聘工作时都得先刷个几十百来道题,不刷题感觉都过不了面试. 无论是面测试.算 ...

  4. leetcode(3)——697. 数组的度(C++版本注释)(map容器),448. 找到所有数组中消失的数字(取余操作,C++中的auto类型)

    文章目录 前言 697 程序 思路 收获 map容器 448 程序 收获 取模操作的思考 auto 前言 大佬的程序,边刷边总结边学语言. 题目697 697 程序 class Solution {p ...

  5. 2021-12-19:找到所有数组中消失的数字。 给你一个含 n 个整数的数组 nums ,其中 nums[i] 在区间 [1, n] 内。请你找出所有在 [1, n] 范围内但没有出现在 nums

    2021-12-19:找到所有数组中消失的数字. 给你一个含 n 个整数的数组 nums ,其中 nums[i] 在区间 [1, n] 内.请你找出所有在 [1, n] 范围内但没有出现在 nums ...

  6. leetcode 448. Find All Numbers Disappeared in an Array | 448. 找到所有数组中消失的数字(原地,位运算)

    题目 https://leetcode.com/problems/find-all-numbers-disappeared-in-an-array/ 题解 遍历数组,将数组中每个数字 n 作为下标,将 ...

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

    给定一个范围在 1≤a[i]≤n1 ≤ a[i] ≤ n1≤a[i]≤n ( n=n =n= 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次. 找到所有在 [1,n][1, ...

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

    目录 1.题目 2.代码及思路 3.进阶 3.1题目 3.2代码及思路 1.题目 给你一个含 n 个整数的数组 nums ,其中 nums[i] 在区间 [1, n] 内.请你找出所有在 [1, n] ...

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

    Given an array of integers where 1 ≤ a[i] ≤ n (n = size of array), some elements appear twice and ot ...

最新文章

  1. google guava工具包collect包HashMultiMap基本用法
  2. 计算机基础与应用(上)笔记总结,计算机基础学习心得体会范文(通用3篇)
  3. Android短信拦截
  4. 关于MCP2515帧连发、多发的坑
  5. 如何使用应用日志(Application Log)
  6. python杨辉三角_yiduobo的每日leetcode 118.杨辉三角 amp;amp; 119.杨辉三角II
  7. 局域网内通过代理服务器上网的详细设置
  8. CenterNet-Objects as Points论文翻译
  9. 任意半径中值滤波(扩展至百分比滤波器)O(1)时间复杂度算法的原理、实现及效果。
  10. mysql数据库工资管理系统_企业工资管理系统--数据库课程设计.doc
  11. 密码系列-Base32
  12. python图形编程复选按钮和单选按钮详细说明_python GUI库图形界面开发之PyQt5复选框控件QCheckBox详细使用方法与实例...
  13. Spring——DI
  14. 基因表达矩阵中排除表达量低的样本和基因
  15. 阿里云免费服务器测试题答案
  16. Android:Content has been consumed
  17. logback配置 (分文件夹、可配路径)_hanCSDN_20180906
  18. 安装部署Ceph Calamari
  19. Java:集合类性能分析
  20. 人活着的三种境界[转帖]

热门文章

  1. Kubernetes 中 设置pod不部署在同一台节点上
  2. 设置腾讯云linux服务器中 MySQL 允许远程访问
  3. python二进制打开(rb)和文本格式打开(r)什么区别?
  4. Python 中 (,|)和(and,or)之间的区别 逻辑判断
  5. 小白给小白详解维特比算法(二)
  6. 深度学总结:skip-gram pytorch实现
  7. TensorFlow反向传播算法实现
  8. pip install scipy和matplotlib报错的问题详解:(pip install其它时报错通用)
  9. 微信小程序var,let,const的区别
  10. java增强for循环