力扣(数组)找到所有数组中消失的数字

给你一个含 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]

方法一:

 public List<Integer> findDisappearedNumbers(int[] nums) {List<Integer> list = new ArrayList<>();HashMap<Integer, Integer> map = new HashMap<>();for (int i=1;i<=nums.length;i++){map.put(i,0);}for (int j=0;j<nums.length;j++){if(map.containsKey(nums[j])){ // 如果原来数组有在区间的数字 把value设置为1map.replace(nums[j],1);}}for (Map.Entry<Integer, Integer> entry : map.entrySet()) {if(entry.getValue().equals(0)) { //获取不在范围内数list.add(entry.getKey());}}return list;}

方法二、

方法一:原地修改
思路及解法

我们可以用一个哈希表记录数组 nums数字,由于数字范围均在 [1,n][1,n][1,n] 中,记录数字后我们再利用哈希表检查 [1,n][中的每一个数是否出现,从而找到缺失的数字。

由于数字范围均在 [1,n]中,我们也可以用一个长度为 nnn 的数组来代替哈希表。这一做法的空间复杂度是 O(n)O(n)O(n) 的。我们的目标是优化空间复杂度到 O(1)。

注意到 nums 的长度恰好也为 n,能否让 nums充当哈希表呢?

由于 nums的数字范围均在 [1,n]中,我们可以利用这一范围之外的数字,来表达「是否存在」的含义。

具体来说,遍历 nums,每遇到一个数 xxx,就让 nums[x−1] 增加 n。由于 nums 中所有数均在 [1,n] 中,增加以后,这些数必然大于 n。最后我们遍历 nums,若 nums[i] 未大于 n,就说明没有遇到过数 i+1。这样我们就找到了缺失的数字。

注意,当我们遍历到某个位置时,其中的数可能已经被增加过,因此需要对 n 取模来还原出它本来的值。

class Solution {public List<Integer> findDisappearedNumbers(int[] nums) {int n = nums.length;for (int num : nums) {int x = (num - 1) % n;nums[x] += n;}List<Integer> ret = new ArrayList<Integer>();for (int i = 0; i < n; i++) {if (nums[i] <= n) {ret.add(i + 1);}}return ret;}
}

方法三:

public class FindMissingNumber {public List<Integer> findDisappearedNumbers(int[] nums) {List<Integer> res = new ArrayList<>();HashSet<Integer> set = new HashSet<>();for (int i = 0; i <nums.length; i++) {set.add(nums[i]);}for (int i = 1; i <= nums.length; i++) {if(set.add(i)){res.add(i);}}return res;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/790174.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

03 cookie session

文章目录 Cookie01.javaCookie02.javaCookieTestServletSessionServlet.java Cookie01.java package com.aistart.cookie;import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.Cookie; import javax.servlet.http.…

力扣 392. 判断子序列

题目来源&#xff1a;https://leetcode.cn/problems/is-subsequence/description/ C题解1&#xff1a;在t中按顺序一个一个寻找s的元素。 class Solution { public:bool isSubsequence(string s, string t) {bool flg false;int m s.size(), n t.size();if(m 0) return tr…

简化Java开发:深入理解Lombok注解

Lombok是一个Java库&#xff0c;它通过注解的方式自动化生成繁琐的Java代码&#xff0c;如getters、setters、构造函数等。这大大减少了样板代码&#xff0c;使代码更加简洁易读。本文将详细介绍Lombok中几个常用注解的使用方法和它们的作用。 引入Lombok 要在Java项目中使用…

离散数学【详解】-自学考试湖北,争取做到识字都能看懂。

回顾8年前&#xff0c;我记得我大学高数没复习&#xff0c;考了23分。 今天公司代码写完了&#xff0c;明天清明节&#xff0c;写篇文章磨磨时间。 我的文章&#xff0c;没有一篇不是磨时间能好好写出来的。 ----我 先列标题&#xff0c;比如h1,h2,这些内容。然后往里面填字&a…

面试题:RabbitMQ 消息队列中间件

1. 确保消息不丢失 生产者确认机制 确保生产者的消息能到达队列&#xff0c;如果报错可以先记录到日志中&#xff0c;再去修复数据持久化功能 确保消息未消费前在队列中不会丢失&#xff0c;其中的交换机、队列、和消息都要做持久化消费者确认机制 由spring确认消息处理成功后…

C语言终篇--基于epoll ET模式 的 非阻塞IO服务器模型

使用技术: 1 epoll事件驱动机制&#xff1a;使用epoll作为IO多路复用的技术&#xff0c;以高效地管理多个socket上的事件。 2 边缘触发&#xff08;Edge Triggered, ET&#xff09;模式&#xff1a;epoll事件以边缘触发模式运行&#xff0c;这要求代码必须负责消费所有可用的…

信奥赛一本通 【例4.2】天安门广场的面积

1.说明 天安门广场在北京市中心&#xff0c;它南北长880米&#xff0c;东西宽500米&#xff0c;试编一程序&#xff0c;计算天安门广场面积是多少平方米。 2.输入格式 无 3.输出格式 输出天安门广场面积。 4.输入数据 无5.输出数据 4400006.题目说明 本题主要考察c语言入门的…

HarmonyOS 应用开发之非线性容器

非线性容器实现能快速查找的数据结构&#xff0c;其底层通过hash或者红黑树实现&#xff0c;包括HashMap、HashSet、TreeMap、TreeSet、LightWeightMap、LightWeightSet、PlainArray七种。非线性容器中的key及value的类型均满足ECMA标准。 HashMap HashMap 可用来存储具有关联…

非线性SVM模型

通过5个条件判定一件事情是否会发生&#xff0c;5个条件对这件事情是否发生的影响力不同&#xff0c;计算每个条件对这件事情发生的影响力多大&#xff0c;写一个非线性SVM模型程序,最后打印5个条件分别的影响力。 示例一 在非线性支持向量机&#xff08;SVM&#xff09;模型中…

Vue3从入门到实战:路由的query和params参数

在Vue 3中&#xff0c;我们可以通过路由的查询参数来传递数据。这意味着我们可以在不同的页面之间传递一些信息&#xff0c;以便页面可以根据这些信息来显示不同的内容或执行不同的操作。 查询参数的使用方式类似于在URL中添加附加信息&#xff0c;以便页面之间可以根据这些信息…

【GlobalMapper精品教程】073:像素到点(Pixels-to-Points)从无人机图像轻松生成点云

文章目录 一、工具介绍二、生成点云三、生成正射四、生成3D模型五、注意事项一、工具介绍 Global Mapper v19引入的新的像素到点工具使用摄影测量原理,从重叠图像生成高密度点云、正射影像及三维模型。它使LiDAR模块成为已经功能很强大的的必备Global Mapper扩展功能。 打开…

JavaScript高级 —— 学习(三)

目录 一、深入面向对象 &#xff08;一&#xff09;面向对象介绍 &#xff08;二&#xff09;面向对象编程 &#xff08;oop&#xff09; 1.面向对象编程介绍 2.面向对象编程优点 3.面向对象的特征 4.和面向过程编程对比 二、构造函数 &#xff08;一&#xff09;介绍…

【HTB】Trick 靶场

Trick靶场 地址&#xff1a;https://app.hackthebox.com/machines/477 打靶过程 靶机IP:10.129.227.180 1.信息收集 1.1 nmap 端口扫描 ┌──(root㉿kali)-[~/Desktop] └─# nmap -Pn -sC -sV -p- 10.129.227.180 --min-rate5000 Starting Nmap 7.94SVN ( https://nmap…

涂条纹(枚举、前缀和)

题目&#xff1a;P3392 涂条纹 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) #include<bits/stdc.h> using namespace std; int n,m,w[50],b[50],r[50]; int ansINT_MAX; string s; inline int check(char c){int tot0;for(int i0;i<m;i){if(s[i]!c) tot;}return t…

C++——list类及其模拟实现

前言&#xff1a;这篇文章我们继续进行C容器类的分享——list&#xff0c;也就是数据结构中的链表&#xff0c;而且是带头双向循环链表。 一.基本框架 namespace Mylist {template<class T>//定义节点struct ListNode{ListNode<T>* _next;ListNode<T>* _pre…

根据用户角色权限,渲染菜单的一个问题记录

个人博客&#xff1a;无奈何杨&#xff08;wnhyang&#xff09; 个人语雀&#xff1a;wnhyang 共享语雀&#xff1a;在线知识共享 Github&#xff1a;wnhyang - Overview 背景 之前一直讲过自己独立在做一个中后台管理系统&#xff0c;当然这个只是开始&#xff0c;未来会基…

Java复习第十四天学习笔记(CSS),附有道云笔记链接

【有道云笔记】十四 3.30 CSS https://note.youdao.com/s/3VormGXs 一、CSS定义和基本选择器 CSS定义&#xff1a;cascading style sheet 层叠样式表。 语法&#xff1a; 选择器 { 属性名1:属性值1; 属性名2:属性值2; 属性名3:属性值3; 属性名4:属性值4; } CSS使用&a…

Python语言例题集(010)

#!/usr/bin/python3 #在链表的末端插入新的节点。 class Node(): def init(self,dataNone): self.datadata self.nextNone class LinkedList(): def init(self): self.headNone def printList(self):ptrself.headwhile ptr:print(ptr.data)ptrptr.nextdef ending(self,newd…

常见网络问题的概述

网络问题概述 网络问题可能包括视频通话延迟、应用或网络速度慢、下载缓冲、VoIP质量差和互联网连接丢失等。 这些问题可能由硬件故障、使用模式变化、安全漏洞等引起&#xff0c;且可能对业务运营产生严重影响。 网络问题对企业的影响 网络问题不可避免&#xff0c;但可以…

实现顺序表(增、删、查、改)

引言&#xff1a;顺序表是数据结构中的一种形式&#xff0c;就是存储数据的一种结构。 这里会用到动态内存开辟&#xff0c;指针和结构体的知识 1.什么是数据结构 数据结构就是组织和存储数据的结构。 数据结构的特性&#xff1a; 物理结构&#xff1a;在内存中存储的数据是否连…