Leetcode︱448. Find All Numbers Disappeared in an Array找到所有数组中消失的数字.java
题目
给定一个范围在 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相关推荐
- 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 ...
- 《LeetCode力扣练习》第448题 找到所有数组中消失的数字 Java
<LeetCode力扣练习>第448题 找到所有数组中消失的数字 Java 一.资源 题目: 给你一个含 n 个整数的数组 nums ,其中 nums[i] 在区间 [1, n] 内.请你 ...
- Leetcode 448. Find All Numbers Disappeared in an Array
Leetcode 448. Find All Numbers Disappeared in an Array Add to List Description Submission Solutions ...
- leetcode(3)——697. 数组的度(C++版本注释)(map容器),448. 找到所有数组中消失的数字(取余操作,C++中的auto类型)
文章目录 前言 697 程序 思路 收获 map容器 448 程序 收获 取模操作的思考 auto 前言 大佬的程序,边刷边总结边学语言. 题目697 697 程序 class Solution {p ...
- 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 这个元素出现过了,能节省存储的空间 ...
- leetcode 448. Find All Numbers Disappeared in an Array | 448. 找到所有数组中消失的数字(原地,位运算)
题目 https://leetcode.com/problems/find-all-numbers-disappeared-in-an-array/ 题解 遍历数组,将数组中每个数字 n 作为下标,将 ...
- [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 ...
- LeetCode 448.找到所有数组中消失的数字
目录 1.题目 2.代码及思路 3.进阶 3.1题目 3.2代码及思路 1.题目 给你一个含 n 个整数的数组 nums ,其中 nums[i] 在区间 [1, n] 内.请你找出所有在 [1, n] ...
- 努力前端【LeetCode-10】448. 找到所有数组中消失的数字 442. 数组中重复的数据(中等) 41. 缺失的第一个正数(困难) [鸽笼原理,数组,Map,类似No.645]
文章目录 题目描述-448 一.哈希Map 二.空间复杂度的优化--鸽笼原理 三.总结 题目描述-442 一.还是hashMap 二.继续鸽笼原理 题目描述-41 一.基础方案 二.数组模拟Map 题 ...
- LeetCode简单题之找到所有数组中消失的数字
题目 给你一个含 n 个整数的数组 nums ,其中 nums[i] 在区间 [1, n] 内.请你找出所有在 [1, n] 范围内但没有出现在 nums 中的数字,并以数组的形式返回结果. 示例 1 ...
最新文章
- oracle 新增自增字段,SQL server、Oracle中拿到新增列时的自增字段值
- 描述Linux的虚拟化实现,Linux中实现虚拟化的四种常用方法
- c语言infile和outfile用法,C语言文件读写基本操作DEMO
- Redis设计与实现阅读总结(一)数据结构和对象
- 扩展欧几里得算法(双六游戏)
- 链家网前端总架构师杨永林:我的8年架构师成长之路
- Web项目测试流程总结
- 遥感数字图像处理复习(朱文泉)
- 考虑SOC蓄电池 双向DC/DC 充放电控制 matlab仿真模型 buck boost
- Intel NUC的win10系统安装教程
- 嵌入式编程经典书籍推荐
- oracle18c客户端,oracle--oracle18C软件安装(一)
- 【k8s】kubernetes编写自己的operator(operator-sdk:v1.xxx)
- 免费使用一年海外云服务器
- 编写一个矩形类,一个正方形类继承这个矩形类,实现一个接口中求对角线的方法。(Java)
- 30天自制操作系统——综合设计
- 杀戮尖塔java启动_slay the spire杀戮尖塔无法启动
- 苹果Swift编程语言入门教程【中文版】
- html图片的宽度和高度设置,CSS设置img图片的宽度和高度
- 浙江移动物联网应用开放平台(免费使用)