概念

鸽笼原理 (抽屉原理) “如果有五个鸽子笼,养鸽人养了6只鸽子,那么当鸽子飞回笼中后,至少有一个笼子中装有2只或2只以上鸽子。”这个简单的事实就是著名的鸽笼原理,在我们国家更多地称为抽屉原理。

问题分析:看到这道题,常规做法就是创建一个的哈希数组来存储1~n的数,然后遍历查重找到缺少的数字。

下面介绍一个很巧妙的解法,也能帮助你更好的理解鸽箱原理。

数组里面数的范围是1~n,那么对应的索引范围就是0~n-1。

我们以示例一解释 [4,3,2,7,8,2,3,1] 解题思路:我们可以利用索引和n的关系,第一个数字是4,我们就将数组的第四个同时也是下标为3的数据改成负数,遍历过程中如果遇到重复的元素,我们可以用abs()方法来保证一直为负数,最后剩下为正数的下标+1就是我们要找的数组。[4,3,2,7,8,2,3,1] 初始数据[4,3,2,-7,8,2,3,1] 第一个数据 4 出现,将下标 3 的数据改为负数。[4,3,-2,-7,8,2,3,1] 第二个数据 3 出现,将下标 2 的数据改为负数。[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> results = new ArrayList<>();for (int i = 0; i < nums.length; i++) {if (nums[Math.abs(nums[i]) - 1] > 0) {nums[Math.abs(nums[i]) - 1] = - nums[Math.abs(nums[i]) - 1];}}for (int i = 0; i < nums.length; i++) {if (nums[i] > 0) {results.add(i + 1);}}return results;}
}

找到数组里消失的数字(鸽笼原理)相关推荐

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

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

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

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

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

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

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

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

  5. 算法题 如何找到数组中重复的数字

    面试题3 数组中重复的数字 题 目 :找出数组中重复的数字. 在一个长度为n的数组里的所有数字都在0 ~ n-1的范围内.数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次. ...

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

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

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

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

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

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

  9. bat从数组中找出相同数字并删除_找到所有数组中消失的数字

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

最新文章

  1. Android UI开发第十四篇——可以移动的悬浮框
  2. 什么是分布式事务以及有哪些解决方案?
  3. springIllegalArgumentException Can not set field to $Proxy 在spring中使用事物或AOP遇到的错误
  4. Python基础知识-优雅的with as语句
  5. ITK:与矢量型图像应用GradientRecursiveGaussianImageFilter
  6. jni加载第三方so_Linux的so文件到底是干嘛的?浅析Linux的动态链接库
  7. oracle group by ,having ,order by
  8. 【API进阶之路】API带来的微创新,打动投资人鼓励我创业
  9. python字符串lower,upper,capwordds方法,translate(使用替换后),maketrans(创建表)的使用(不知道怎么回事这个变乱了?后期再整理)
  10. 战斗民族的Yandex开始首次雪地无人车路测 | 视频
  11. JAVA b2b2c多用户商城系统源码-服务发现服务端EurekaServer微服务
  12. 修改mysql数据库默认字符集_MySQL数据库之修改mysql默认字符集的两种方法详细解析...
  13. 【KDD20】主题模型在图模型中的应用专题
  14. HOLOLENS的DEVICE POTAL连接和安装
  15. html表格中加入斜线,html中给表格添加斜线
  16. 去哪儿CEO庄辰超:傍百度战携程与巨头共舞
  17. 三个灭点来衡量一个立方体
  18. 响铃:抖音微视撕逼,但音乐短视频只有“神曲”逻辑吗?
  19. linux系列(七):shell编程、shell概念、ssh协议概念、执行shell文件的三种方式
  20. Renice INC:葡萄酒常用的保鲜方法

热门文章

  1. DataStage History
  2. linux操作系统下c语言编程入门
  3. Android 装置CTS与GMS认证差异
  4. 微信小程序显示折线图
  5. python欧拉螺线_基于菲涅耳积分的Python OpenDrive地图螺旋线/回旋线/欧拉螺旋线/Cornu螺旋线插值...
  6. 缓和曲线与原曲线任意点坐标计算程序
  7. 聊天机器人技术分析综述
  8. 国内外最好用的6款Bug跟踪管理软件,测试员不可不知!
  9. python 自动输入验证码_python 自动生成验证码并 输入识别
  10. ggplot2-散点图的边框与填充色问题