【力扣刷题】只出现一次的数字

news2025/2/27 1:40:28

🔗 题目链接

题目描述

给你一个 非空 整数数组 nums ,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。

你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间。

题目分析

方法一:暴力

这道题用暴力完全可以求解出来,两层循环,但是时间复杂度是O(n)

或者,先对nums排序,这样时间复杂度是O(nlogn)

方法二:hash表

还可以用hash表,遍历一遍nums,把每个数出现的次数记录在hash表中,然后从hash表中找出次数为1的那个数即可。

/**
 * @param {number[]} nums
 * @return {number}
 */
var singleNumber = function (nums) {
  let hashMap = new Map();
  let count = 0;
  // 把每个数的次数记录到 map 中,key为该数,value为次数
  for (let i = 0; i < nums.length; ++i) {
    count = hashMap.get(nums[i]) || 0;
    hashMap.set(nums[i], count + 1);
  }
  // 遍历 map,找出次数为1的那个数
  for (let obj of hashMap) {
    if (obj[1] == 1) {
      return obj[0];
    }
  }
};

方法三:位运算

什么是位运算?从现代计算机中所有的数据二进制的形式存储在设备中。即 0、1 两种状态,计算机对二进制数据进行的运算(+、-、*、/)都是叫位运算,即将符号位共同参与运算的运算。

口说无凭,举一个简单的例子来看下 CPU 是如何进行计算的,比如这行代码:

int a = 35;
int b = 47;
int c = a + b;

计算两个数的和,因为在计算机中都是以二进制来进行运算,所以上面我们所给的 int 变量会在机器内部先转换为二进制在进行相加:

35:  0 0 1 0 0 0 1 1
47:  0 0 1 0 1 1 1 1
————————————————————
82:  0 1 0 1 0 0 1 0

所以,相比在代码中直接使用(+、-、*、/)运算符,合理的运用位运算更能显著提高代码在机器上的执行效率。

符号描述运算规则
&两个位都为1时,结果才为1
|两个位都为0时,结果才为0
^异或两个位相同为0,相异为1
~取反0变1,1变0
<<左移各二进位全部左移若干位,高位丢弃,低位补0
>>右移各二进位全部右移若干位,对无符号数,高位补0,有符号数,各编译器处理方法不一样,有的补符号位(算术右移),有的补0(逻辑右移)

现在,我们假设这个数组是nums=[3, 2, 1, 2, 3],方便起见,我们就假设二进制位数最多只有4位。

1的二进制:0001
2的二进制:0010
3的二进制:0011

我们可以用如下表格来表示:

-第1位第2位第3位第4位
30011
20010
10001
20010
30011
异或运算0001

经过异或运算,我们发现,结果是0001,十进制也就是1。

题解代码

/**
 * @param {number[]} nums
 * @return {number}
 */
var singleNumber = function (nums) {
  let res = 0;
  for (let i = 0; i < nums.length; ++i) {
    res ^= nums[i];
  }
  return res;
};

运行结果

松露老师

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

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

相关文章

java类的练习 -- 声明一个接口(Calculability),接口中

java类的练习 – 声明一个接口(Calculability)&#xff0c;接口中… 题目 编写一个应用程序&#xff0c;实现以下功能&#xff1a; ①声明一个接口(Calculability)&#xff0c;接口中包含一个方法area()。 ②声明一个三角形类实现该接口&#xff0c;类名为Triangle&#xf…

React源码分析2-深入理解fiber

react16 版本之后引入了 fiber&#xff0c;整个架构层面的 调度、协调、diff 算法以及渲染等都与 fiber 密切相关。所以为了更好地讲解后面的内容&#xff0c;需要对 fiber 有个比较清晰的认知。本章将介绍以下内容&#xff1a; 为什么需要 fiberfiber 节点结构中的属性fiber 树…

AR眼镜新秀雷鸟创新,究竟能飞多远?

时隔近十年之后&#xff0c;消费级AR眼镜又重新高调回归大众视野。 自去年10月开始&#xff0c;以OPPO、小米为代表的国内大厂纷纷推出试验性AR眼镜&#xff0c;谷歌第二代AR眼镜更是作为压轴在I/O大会上重新回归&#xff0c;苹果多年来不断提及但始终“难产”的AR产品&#x…

平衡二叉树(AVL树)

1.简介 1.二叉排序树的问题: 如果原始是数据是排好序的(如1,2,3,4,5,6),那么最终创建的二叉排序树的结构就会变成一条斜线,类似于一条单链表,此时如果需要查找/插入某个元素就要一个一个元素的比较,这样就没有优势了.由于每次都要比较左子树,其查询速度甚至比单链表还慢; 2.对…

labview 写入文本到word报表(标签方法)

描述labview按预先定义的包含数个标签的模板&#xff0c;复制模板到新文件&#xff0c;写入文本到各标签位置。 图1 前面板 图2 程序框图 图3 Ms office report 图4 配置Ms office report的属性1 图5 配置Ms office report的属性2

在vue2项目中使用vue-quill-editor实现富文本编译器

1 安装 npm install vue-quill-editor --save 2 引入 有两种引入方式 &#xff08;1&#xff09;全局引入(main) import VueQuillEditor from vue-quill-editor//调用编辑器 // 样式 import quill/dist/quill.core.css import quill/dist/quill.snow.css import quill/dist…

浅谈无脚本自动化测试

在当今的企业环境中&#xff0c;软件测试不再被视为不必要的投资&#xff1b;相反&#xff0c;它已经上升到一种需要而不是奢侈品的水平。随着市场的不断变化和竞争的加剧&#xff0c;企业必须做一些让他们与竞争对手区分开来的事情。 为了使自己与众不同&#xff0c;公司必须提…

【1-系统架构演进过程】

特别说明:接下来我会和大家一起完成一个商城项目&#xff0c;这个项目涉及的内容以及技术不仅多&#xff0c;而且都是现在主流的开发技术&#xff0c;每天我会按时更新博客内容&#xff0c;详细记录学习的过程&#xff0c;感兴趣的同学可以和我一起完成&#xff0c;但是时间较长…

国际贸易详解:国际贸易主要有哪些分类标准和运输方式

国际贸易主要的分类标准包括按商品流向分为出口贸易&#xff0c;进口贸易和过境贸易&#xff0c;按商品形态分为有形贸易和无形贸易&#xff0c;按运输方式分为陆运贸易&#xff0c;海运贸易等。一、国际贸易主要有哪些分类标准 1、按商品流向分为出口贸易、进口贸易、过境贸易…

2022英特尔® FPGA中国技术周

本文图片均来自于2022英特尔 FPGA中国技术周线上会议 11.14 全新的中端和以边缘为中心的FPGA 英特尔 Agilex™ FPGA的下一代接口协议 11.15 Nios V: 基于FPGA的RISC-V处理器 英特尔 Quartus Prime开发软件 基于FPGA的人工智能开发套件 Case 使用oneAPI高级语言开发IP​ 将…

油罐清洗抽吸系统设计

目录 摘要 - 1 - Abstract - 2 - 1 引言 - 3 - 1.1课题的背景和意义 - 3 - 1.1.1课题的背景 - 3 - 1.1.2课题的意义 - 3 - 1.2国内外油罐清洗抽吸系统的研究情况 - 3 - 2 油罐清洗抽吸系统总体设计方案 - 6 - 2.1油罐清洗抽吸系统方案 - 6 - 2.2清洗对象及要求 - 6 - 2.3清洗工…

欧拉路径!

呃在昨晚的破防之下我并不想学这东西所以留到今晚&#xff1f;属于是懒爆了。那么我们来看&#xff0c;定义的话其实前面写过了 其实主要是分两个方面: 1.图是否联通&#xff0c;是什么图 2.这个图每个点的度数或者&#xff08;出度入度&#xff09;什么的若是符合就行。 偷偷总…

【C++】C++基础知识(四)---程序流程结构

C基础知识&#xff08;四&#xff09;1. 顺序结构2. 选择结构2.1 if语句2.2 switch语句2.3 选择结构案例3. 循环结构3.1 循环语句3.2 循环结构案例4. 跳转语句C中支持的三种流程结构&#xff1a;顺序结构、选择结构、循环结构顺序结构&#xff1a;程序按照顺序执行&#xff0c;…

easy-monitor3.0 nodejs性能监控和分析工具

#easy-monitor性能监控和分析工具 Easy-Monitor 3.0 https://blog.csdn.net/qq_36791889/article/details/115420116 #git地址&#xff1a;https://github.com/1981430140/easy-monitor-docker-compose.git 一、easy-monitor 服务器端安装&#xff08;docker-compose&#xff…

我说MySQL里每张表不要超过100w数据,面试官让我回去等通知?

V-xin&#xff1a;ruyuanhadeng获得600页原创精品文章汇总PDF 目录 1、面试题2、面试官心理分析3、面试题剖析 1、面试题 事务的几个特点是什么&#xff1f;数据库事务有哪些隔离级别&#xff1f;MySQL的默认隔离级别&#xff1f; 2、面试官心里分析 用mysql开发的三个基本…

操作系统4小时速成:处理机调度,调度方法,调度准则,典型的调度算法,响应比

操作系统4小时速成&#xff1a;处理机调度&#xff0c;调度方法&#xff0c;调度准则&#xff0c;典型的调度算法&#xff0c;响应比 2022找工作是学历、能力和运气的超强结合体&#xff0c;遇到寒冬&#xff0c;大厂不招人&#xff0c;可能很多算法学生都得去找开发&#xff…

详探XSS PayIoad

详探XSS PayIoad1.Cookie劫持2.构造GET与POST请求3.XSS钓鱼4.识别用户浏览器1.Cookie劫持 一个最常见的XSS Payload&#xff0c;就是通过读取浏览器的Cookie对象&#xff0c;从而发起“Cookie劫持”攻击 Cookie中一般加密保存了当前用户的登录凭证。Cookie如果丢失&#xff0…

码神之路项目部署(五)

这一章主要是讲解一下怎么部署上线项目 一、上线准备 腾讯云服务器一台&#xff08;2核2g&#xff09;、域名一个 &#xff08;可有可无&#xff09; 说明&#xff1a;当然了服务器的配置根据项目来选择&#xff0c;2核2g跑这个博客小项目是完全没有问题的 二、服务器安装环…

但见新人笑,那闻旧人哭,大衣哥前儿媳陈亚楠好可怜

著名爱国艺人黄安&#xff0c;曾经演唱过一首歌曲&#xff0c;名字叫作《新鸳鸯蝴蝶梦》&#xff0c;歌词写的是相当棒。比如说“由来只有新人笑&#xff0c;有谁听到旧人哭”这句歌词&#xff0c;就是农民歌唱家大衣哥&#xff0c;前儿媳陈亚楠的真实写照。 陈亚楠之所以和大衣…

迈动互联获“ISO20000信息技术服务管理体系认证证书”

近日&#xff0c;迈动互联获得“ISO20000信息技术服务管理体系标准”认证证书&#xff0c;该证书标志着迈动在IT服务管理标准领域的关键技术取得了制度流程规范性和完备性上的进一步提升。 此前&#xff0c;迈动已经获得专精特新企业评定、ISO9001质量管理体系认证、27001信息…