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

找到所有在 [1,n][1, n][1,n] 范围之间没有出现在数组中的数字。

您能在不使用额外空间且时间复杂度为O(n)的情况下完成这个任务吗? 你可以假定返回的数组不算在额外空间内。

示例:

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

\space 
输出:
[5,6]

解题思路:题目要求不使用额外空间同时时间复杂度为O(n),所以使用标记的方法。对于数组中某个数nums[i]nums[i]nums[i],以其值为索引对应的数组元素标记为负数,即nums[nums[i]−1]=−1∗nums[nums[i]−1]nums[ nums[i]-1 ] = -1 * nums[ nums[i]-1 ]nums[nums[i]−1]=−1∗nums[nums[i]−1]。

但是需要注意的是nums[nums[i]−1]nums[ nums[i]-1 ]nums[nums[i]−1]所对应的值作为索引的时候,如果是负数会导致数组越界问题,所以需要分两种情况讨论。如代码所示,两种情况分别讨论。

class Solution {public:vector<int> findDisappearedNumbers(vector<int>& nums) {for(int i=0;i<nums.size();++i){if(nums[i]>0 && nums[nums[i]-1] >0)  # 如果当前值为正数,同时,当前值指向的值也是正数,则把指向的值变为负数{nums[nums[i]-1] = -1*nums[nums[i]-1];continue;}if(nums[i]<0 && nums[-(nums[i]+1)]>0)  # 如果当前值为负数,但是当前值的绝对值指向的值为正数,则需要把指向的值变为负数nums[-(nums[i]+1)] = -1 * nums[-(nums[i]+1)];}vector<int> num;for(int i=0;i<nums.size();++i)  # 判断数组中元素值为正数的索引{if(nums[i]>0)num.push_back(i+1);}return num;}
};

leetcode - 448. 找到所有数组中消失的数字相关推荐

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

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

  2. leetcode 448. 找到所有数组中消失的数字(Java版)

    题目 https://leetcode-cn.com/problems/find-all-numbers-disappeared-in-an-array/ 思路 维护一个 bool 数组,用来记录哪些 ...

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

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

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

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

  5. 努力前端【LeetCode-10】448. 找到所有数组中消失的数字 442. 数组中重复的数据(中等) 41. 缺失的第一个正数(困难) [鸽笼原理,数组,Map,类似No.645]

    文章目录 题目描述-448 一.哈希Map 二.空间复杂度的优化--鸽笼原理 三.总结 题目描述-442 一.还是hashMap 二.继续鸽笼原理 题目描述-41 一.基础方案 二.数组模拟Map 题 ...

  6. LeetCode-----算法448.找到所有数组中消失的数字

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

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

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

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

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

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

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

最新文章

  1. [C#]ASP.NET MVC 3 在线学习资料
  2. VirtFS 虚拟化技术简介
  3. mysql 正则表达式_MySQL(基础正则表达式)
  4. 自动档车正确起步方法,自动挡开车起步7个步骤
  5. Linux系统下Oracle11g r1的安装之四: 开始安装Oracle
  6. Native Client 资料
  7. CAN 屏蔽器与滤波器(过滤器)
  8. redis源码阅读(1)
  9. c语言读取nc文件格式,nc文件资料地读取与处理.doc
  10. luna16标签数据里的xyz,以及CT的dicom.ImagePositionPatient里的三个值分别代表哪些轴的初始点
  11. 中国酒精炉行业市场供需与战略研究报告
  12. 微软拆分 VS Code 中 Python 扩展,部分功能可独立下载
  13. Hibernate 对c3p0配置不支持导致的错误
  14. Codeforces Round #FF (Div. 2) D. DZY Loves Modification 贪心+优先队列
  15. Iaas,paas,saas区别与联系
  16. 你以为我在玩游戏?其实我在学 Java
  17. 萤火小程序商城系统安装教程
  18. 你靠谱吗?看看“价值观”究竟有多重要
  19. 企业为何需要网络拓扑软件?
  20. BWA mem序列比对时出现:paired reads have different names 问题解决

热门文章

  1. 关于cacti图形显示不正常的解决办法
  2. 商业版《隋唐演义》三:收购瓦岗寨
  3. Java服务,内存OOM问题如何快速定位?
  4. RedisUtil - Redis功能介绍,五种数据类型的使用,Spring和Redis的集成
  5. 初识人工智能(一):数据分析(二):numpy科学计算基础库(一)
  6. vue data变量之间相互赋值或进行数据联动
  7. 在玩客云上部署code-server
  8. 【C语言】用C语言输出一个吃豆人
  9. 带用户名和密码的GitHub链接
  10. 注册表操作命令reg