题目

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

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

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

示例 :

输入:

[4,3,2,7,8,2,3,1]
输出:
[5,6]

标签

数组;哈希

解题思路

方法一:哈希

先将数组中出现的数字保存到哈希表中,第二次遍历时,将未在其中的数返回。

方法二:技巧解法

将所有正数作为数组下标,置对应数组值为负值。那么,仍为正数的位置即为(未出现过)消失的数字。

代码

public class Leetcode448 {public static void main(String[] args) {int[] nums = {4, 3, 2, 7, 8, 2, 3, 1};List<Integer> ans = findDisappearedNumbers(nums);System.out.println(ans);}//方法一:哈希public static List<Integer> findDisappearedNumbers(int[] nums) {int len = nums.length;//要返回的答案List<Integer> ans = new ArrayList<>();Map<Integer, Integer> map = new HashMap<>();//将出现的数字进行保存for (int i = 0; i < len; i++) {//只记录一次不重复的数字到mapif (!map.containsKey(nums[i])) {map.put(nums[i], 1);}}for (int i = 1; i <= len; i++) {//遍历1~len,如果map没有包含就添加if (!map.containsKey(i)) {ans.add(i);}}return ans;}//方法二:将所有正数作为数组下标,置对应数组值为负值。那么,仍为正数的位置即为(未出现过)消失的数字。public static List<Integer> findDisappearedNumbers2(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;}
}

来源:力扣(LeetCode)

链接:https://leetcode-cn.com/problems/find-all-numbers-disappeared-in-an-array/

Leetcode︱448. Find All Numbers Disappeared in an Array找到所有数组中消失的数字.java相关推荐

  1. 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 ...

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

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

  3. Leetcode 448. Find All Numbers Disappeared in an Array

    Leetcode  448. Find All Numbers Disappeared in an Array Add to List Description Submission Solutions ...

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

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

  5. LeetCode 448. Find All Numbers Disappeared in an Array 442. Find All Duplicates in an Array

    这两道题很有意思,由于元素为1~n,因此每个元素的值-1(映射到0~n-1)就可以直接当做下标.这样将 nums 中对应下标的元素 *-1 以i表示 index+1 这个元素出现过了,能节省存储的空间 ...

  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] 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 ...

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

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

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

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

  10. LeetCode简单题之找到所有数组中消失的数字

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

最新文章

  1. oracle 新增自增字段,SQL server、Oracle中拿到新增列时的自增字段值
  2. 描述Linux的虚拟化实现,Linux中实现虚拟化的四种常用方法
  3. c语言infile和outfile用法,C语言文件读写基本操作DEMO
  4. Redis设计与实现阅读总结(一)数据结构和对象
  5. 扩展欧几里得算法(双六游戏)
  6. 链家网前端总架构师杨永林:我的8年架构师成长之路
  7. Web项目测试流程总结
  8. 遥感数字图像处理复习(朱文泉)
  9. 考虑SOC蓄电池 双向DC/DC 充放电控制 matlab仿真模型 buck boost
  10. Intel NUC的win10系统安装教程
  11. 嵌入式编程经典书籍推荐
  12. oracle18c客户端,oracle--oracle18C软件安装(一)
  13. 【k8s】kubernetes编写自己的operator(operator-sdk:v1.xxx)
  14. 免费使用一年海外云服务器
  15. 编写一个矩形类,一个正方形类继承这个矩形类,实现一个接口中求对角线的方法。(Java)
  16. 30天自制操作系统——综合设计
  17. 杀戮尖塔java启动_slay the spire杀戮尖塔无法启动
  18. 苹果Swift编程语言入门教程【中文版】
  19. html图片的宽度和高度设置,CSS设置img图片的宽度和高度
  20. 浙江移动物联网应用开放平台(免费使用)

热门文章

  1. 怎么使用win10自带修复系统功能
  2. 第10章项目干系人管理__权力利益分配
  3. WEBSHELL 提权方法总结
  4. ubuntu16.04登录后只有蓝色背景解决方法
  5. Photoshop CC 2018 安装包安装教程
  6. react customize-cra 配置less modules
  7. SQLServer简繁互换
  8. 蓝牙定位技术原理,蓝牙定位应用场景-室内定位-新导智能
  9. Android 自定义视频录制终极解决方案(翻转问题)
  10. HDU-4565 So Easy!