牛客热题:数组中出现一次的两个数字

📟作者主页:慢热的陕西人

🌴专栏链接:力扣刷题日记

📣欢迎各位大佬👍点赞🔥关注🚓收藏,🍉留言

在这里插入图片描述

文章目录

  • 牛客热题:数组中出现一次的两个数字
    • 题目链接
    • 方法一:哈希
      • 思路
      • 代码
      • 复杂度
    • 方法二:位运算,分组
      • 思路
      • 代码
      • 复杂度

牛客热题:数组中出现一次的两个数字

题目链接

数组中只出现一次的两个数字_牛客题霸_牛客网 (nowcoder.com)

方法一:哈希

思路

step1: 遍历数组,将其中的数字都统计到哈希表

step2:遍历哈希表,然后将其中只出现一次的插入到答案数组中即可

代码

vector<int> FindNumsAppearOnce(vector<int>& nums) {map<int, int> hash;vector<int> v;for(auto & n : nums){hash[n]++;}for(auto& h : hash){if(h.second == 1)v.push_back(h.first);}return v;}

复杂度

时间复杂度:O(N) , 相当于遍历了两次数组

空间复杂度:O(N) , 利用了额外的空间,哈希表。

方法二:位运算,分组

思路

这段代码是用来找出一个数组中只出现一次的两个数字的。它的思路是利用异或操作找出数组中所有数字的异或结果,异或结果中为1的最低位,根据这个最低位将数组分为两组,分别进行异或操作,得到的结果就是这两个只出现一次的数字。

原理:

  • 我们这么做的原理是将问题拆分:
  • 当我们的题目是寻找数组中唯一一个只出现一次的数字时,我们只需要遍历一次进行异或运算,那么我们就可以得到结果。
  • 所以我们可以将这一个数组进行分组:分成两个这样的上面的数组,然后求出每个数组对应的唯一的数字即可
  • 所以我们分组的依据就是其中异或结果的为1的最低位。因为这样恰好将两个唯一出现的数字分开,并且可以将出现两次的数组都分到同一个组内。从而形成上面的分组

代码

vector<int> FindNumsAppearOnce(vector<int>& nums) {vector<int> res;int x = 0;for(auto n : nums){x ^= n;}int mask = 1;while((x & mask) == 0){mask = mask << 1;}int a = 0;int b = 0;for(auto n : nums){if(mask & n){a ^= n;}else{b ^= n;}}//不满足顺序就交换if(a > b){a ^= b;b ^= a;a ^= b;}res.push_back(a);res.push_back(b);return res;}

复杂度

时间复杂度分析:

  1. 第一个循环遍历整个数组,时间复杂度为O(n),其中n为数组长度。
  2. 第二个循环也是遍历整个数组,时间复杂度为O(n)。
    所以总的时间复杂度为O(n)。

空间复杂度分析:
除了存放结果的数组res外,只使用了几个常量级别的变量,所以空间复杂度为O(1)。

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

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

相关文章

开发Windows应用程序的多种工具和语言

在软件开发领域&#xff0c;Windows应用程序的开发是一个广泛而多样化的领域。开发者可以利用各种工具和编程语言来创建功能丰富、用户友好的应用程序。以下是一些常见的开发环境和编程语言&#xff0c;它们被广泛用于开发Windows应用程序。 Visual Studio&#xff1a;微软的集…

集成学习算法笔记

一、引言 在机器学习和数据分析领域&#xff0c;集成学习算法因其能够显著提高模型预测性能而备受关注。然而&#xff0c;任何算法在应用过程中都不可避免地会遇到一些挑战和问题&#xff0c;集成学习算法也不例外。其中&#xff0c;最为常见且关键的两大问题便是欠拟合&#…

全国水系数据(更新到2024年5月)

上海市水系数据地图可视化 水系数据线图层&#xff08;小河/溪流、江/河、运河、下水道/排水管&#xff09; 水系数据面数据&#xff08;水域、水库、河岸、湿地&#xff09; 水系数据字段说明 可视化预览 北京市水系可视化 上海市水系可视化 广州市水系可视化 深圳市水系可视化…

考研数学考到110+分,到底有多难?

很难&#xff01; 大家平时在网上上看到很多人说自己考了130&#xff0c;其实这些人只占参加考研数学人数的极少部分&#xff0c;有个数据可以展示出来考研数学到底有多难&#xff1a; 在几百万考研大军中&#xff0c;能考到120分以上的考生只有2%。绝大多数人的分数集中在30…

Django 注册应用

上一章Django 创建项目及应用-CSDN博客 创建的应用&#xff0c;需要在主项目的myshop.settings.py 文件下注册 INSTALLED_APPS [django.contrib.admin,django.contrib.auth,django.contrib.contenttypes,django.contrib.sessions,django.contrib.messages,django.contrib.sta…

[DDR5 Jedec 4-1] 预充电命令 Precharge

依公知及经验整理&#xff0c;原创保护&#xff0c;禁止转载。 专栏 《深入理解DDR》 1. 预充电&#xff08;Precharge&#xff09;含义 由于SDRAM的寻址具体独占性&#xff0c;因此在进行完读写操作后&#xff0c;若需对同一L-Bank的另一行进行寻址&#xff0c;则必须先关闭原…

关于SQL中json类型字段优化查询

场景 写sql时&#xff0c;会出现大量的left join的情况&#xff0c;针对这种方式提供 两种解决方案。 解决方案 方案一 宽表&#xff0c;但是其维护性差 方案二 JSON类型字段 将业务查询的一些实体类 直接以JSON的形式存到数据库&#xff0c;以下是SQL代码查询的实例 dat…

vue3 源码下载地址

想要了解vue3底层的代码逻辑&#xff0c;就需要看其代码&#xff0c;为了技术的进步&#xff0c;冲啊。 源码下载地址&#xff1a; git clone https://github.com/vuejs/core.git 雄鹰每次折断翅膀&#xff0c;是为了飞的更高更远。技术提升起来&#xff0c;飞的更远更高。

Linux虚拟机设置定时任务(crontab)

Linux虚拟机设置定时任务(crontab) 在Linux中&#xff08;使用Cron&#xff09;&#xff1a; crontab 详解: crontab 是一个用于在 Unix 和类 Unix 操作系统上运行定期任务的工具。它允许用户根据特定的时间表执行命令或脚本&#xff0c;而无需手动执行它们。 使用 crontab…

0开篇-介绍

创作灵感 最近又开始写Python&#xff0c;换新机器了&#xff0c;加上回顾硬盘上的一些资料&#xff0c;发现当时用在态势上的一些机器学习内容一直没有收尾&#xff0c;2019年10月研发中心成立中断了机器学习产品的研发&#xff0c;加上后来疫情&#xff0c;这几年荒废了。有…

如何创建一个线程池,为什么不推荐使用Executors去创建呢?

我们在学线程的时候了解了几种创建线程的方式&#xff0c;比如继承Thread类&#xff0c;实现Runnable接口、Callable接口等&#xff0c;那对于线程池的使用&#xff0c;也需要去创建它&#xff0c;在这里我们提供2种构造线程池的方法&#xff1a; 方法一&#xff1a; 通过Thre…

【vue】vue2项目将npm包管理器修改为yarn包管理器

【vue】vue2项目将npm包管理器修改为yarn包管理器 1.删除node_modules文件夹、package-lock.json文件 2.全局安装yarn npm install -g yarn3.安装项目依赖 yarn install如果执行yarn install 报类似以下这种版本不兼容错误&#xff0c;执行 yarn config set ignore-engines …

MySQL之数据库数据库范式学习笔记(二)

三大范式 范式是数据库设计中的概念&#xff0c;用于规范化数据结构&#xff0c;以减少数据冗余并确保数据的一致性和完整性。MySQL 数据库设计通常遵循一定的范式&#xff0c;其中最常见的是第一至第三范式。以下是各个范式的简要说明&#xff1a; 第一范式&#xff08;1NF&…

【Qt】探索Qt绘图世界:自定义控件与视觉效果的全面指南

文章目录 前言&#xff1a;1. 绘图基本概念2. 绘制各种形状3. 绘制文字&#xff08;显示文字&#xff09;、设置画笔4. 画刷5. 绘制图片6. 特殊的绘图设备总结&#xff1a; 前言&#xff1a; 在软件开发中&#xff0c;图形用户界面&#xff08;GUI&#xff09;的设计是至关重要…

Unity中帧动画素材的切割设置

有几个问题&#xff0c;美术在给我们帧动画的时候&#xff0c;一般都是给一个比较大的图&#xff0c;然后进行切割成多个sprite&#xff0c;导入到animation中 一般来说&#xff0c;进行那个autoSlide&#xff0c;自动切割就可以了 这个自动切割的图片会沿着有像素的最小包围…

【1】AI介绍

迎接 AGI 时代 AGI(Artificial General Intelligence),人工通用智能,AGI是一种可以执行复杂任务的人工智能,能够完全模仿人类智能的行为。应用领域涉及医疗、交通、智能家居等多个与人类活动密切相关的领域。 AGI 多久会到来? 乐观预测:明年(未来已来)主流预测:3-5…

js 同步和异步学习笔记

1、为什么有同步和异步&#xff1f; js是单线程&#xff0c;因为同个时间只能处理一个任务&#xff0c;所有的任务都要排队&#xff0c;前一个任务执行完&#xff0c;才能继续执行下一个任务。 因此js设计时先挂起来处于等待中的任务&#xff0c;先运行排在后面的任务&#xff…

【数据结构与算法 | 力扣篇】力扣每日一题575

1. 力扣575 : 分糖果 (1). 题 Alice 有 n 枚糖&#xff0c;其中第 i 枚糖的类型为 candyType[i] 。Alice 注意到她的体重正在增长&#xff0c;所以前去拜访了一位医生。 医生建议 Alice 要少摄入糖分&#xff0c;只吃掉她所有糖的 n / 2 即可&#xff08;n 是一个偶数&#…

RHEL7.9修改分区

系统RHEL7.9 他因为安装软件&#xff0c;需要修改分区 进入超级用户root&#xff0c;输入lsblk 查看分区&#xff0c;可见465.8G系统盘sda下有三个物理卷&#xff0c;其中sda3下/home有410.6G&#xff0c;需要这部分拆分出200G软件和100G的数据库分区 备份/home 目录下文件 c…

Apache Omid Idea Debug 环境搭建

IDEA 搭建 Apache Omid 源码 DEBUG 环境 Apache Omid 在 Apache HBase 之上提供了多行分布式事务的能力&#xff0c;支持全局 MVCC 功能。简单介绍编译过程。 1.下载 HBase2 并启动 https://dlcdn.apache.org/hbase/ 配置环境变量 export HBASE_HOME/xxx/hbase-2.4.18 exp…