【刷题】只出现一次的数字(三种解法)

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


文章目录

  • 【刷题】只出现一次的数字
    • 解法
      • 异或运算
      • 解法一 : 异或运算
      • 解法二:集合类
        • Set集合
        • Map集合

链接:

https://www.nowcoder.com/share/jump/2008263481696810321082

https://leetcode.cn/problems/single-number/description/

题目描述

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

解法

在使用异或运算解题之前,我们先介绍一下异或运算,并会在使用异或运算解问题之后总结分别利用到了 **异或运算 ** 怎样的性质?

(如果你对异或运算很了解,可以直接跳过 异或运算 的讲解,看其他的解法)

异或运算

  • 什么是异或运算?

    1.异或运算是位运算 (参与位运算的对象是二进制)

    2.异或运算相当于 “无进位相加” ,即 二进制相加不进位

  • 定义

    两个参与运算的对象,对两对象进行 异或运算

  • 运算规则

0^0=0   0^1=1   1^0=1  1^1=0 
  • 总结

    参与运算的两个对象,如果相同则为0,相异则为1

  • 性质

    任意x与0异或都为x : x^0 = x

    任意x与x异或都为0 : x^x = 0

  • 用途

    1.翻转指定位

    例如 : 翻转10100011 的后3位,翻转结果为10100100

    10100011 ^ 00000111 = 10100100
    

在这里插入图片描述

  1. 任何数与0异或值不变

例如 : 10101010 ^ 00000000 = 10101010

  1. 交换两数
public void swap(int a,int b){if (a != b){a ^= b;b ^= a;a ^= b;}
}

在这里插入图片描述


解法一 : 异或运算

思路 :
遍历数组,对所有的元素进行 异或运算

代码:

public int singleNumber (int[] nums) {int temp = 0;for(int i = 0;i < nums.length;i++){temp ^= nums[i];}return temp;}

解释 : 我们在这里都使用到了 关于异或运算 怎么样的性质呢 ?

由于数组中只有一个元素只出现一遍,其余的元素都出现两遍 , 那么我们在对所有元素相异或的时候,会出现这样的现象 x^x = 0, 0^x = x ; 这样之后,当全部元素都相异或之后,temp保存的值就是只出现一遍的元素.


解法二:集合类


Set集合

思路 :

利用Set集合中的contains(K key)方法.

  1. 遍历数组的同时往Set集合中插入当前元素,插入的前提是集合中不存在该元素,即
  • 若该元素在Set中已经存在,则将Set集合中已存在的删除并继续遍历;
  • 若该元素在Set中不存在,则顺利插入并继续遍历
  1. 现在Set集合中就只剩下目标元素temp,通过 迭代Set集合找temp/遍历数组找出Set集合中的temp

代码 :

public int singleNumber(int[] nums) {Set<Integer> set = new HashSet<>();//遍历数组for (int i = 0; i < nums.length; i++) {int key = nums[i];if (set.contains(key)) {set.remove(key);} else {set.add(key);}}//我们这里采用遍历数组获取目标元素for (int i = 0; i < nums.length; i++) {int key = nums[i];if (set.contains(key)) {return key;}}return -1; //没有找到返回-1}

Map集合

思路:

  • 遍历数组的同时把数组中的元素插入到Map集合中担任key的角色

  • 实时更新存入元素key的value值

我这里采用的是Map集合中的getOrDefault(K key,V value) 方法来做

代码 :

 public int singleNumber (int[] nums) {Map<Integer,Integer> map = new HashMap<>();//遍历数组for (int i = 0; i < nums.length; i++) {int key = nums[i];int value =  map.getOrDefault(key,0);map.put(key,value+1);}//迭代Map集合,找到value等于1的keyfor (Map.Entry<Integer,Integer> entrySet:map.entrySet()) {if (entrySet.getValue()==1){return entrySet.getKey();}}return -1;}

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

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

相关文章

[PyTorch][chapter 57][WGAN-GP 代码实现]

前言&#xff1a; 下图为WGAN 的效果图&#xff1a; 绿色为真实数据的分布&#xff1a; 8个高斯分布 红色&#xff1a; 为随机产生的数据分布&#xff0c;跟真实分布基本一致 WGAN-GP&#xff1a; 1 判别器D: 最后一层去掉sigmoid 2 生成器G 和判别器D: loss不取log 3 损失函数…

讲讲项目里的仪表盘编辑器(四)分页卡和布局容器组件

讲讲两个经典布局组件的实现 ① 布局容器组件 配置面板是给用户配置布局容器背景颜色等属性。这里我们不需要关注 定义文件 规定了组件类的类型、标签、图标、默认布局属性、主文件等等。 // index.js import Container from ./container.vue; class ContainerControl extends…

java:代理模式

概念代理模式 概念&#xff1a; 真实对象&#xff1a;被代理的对象&#xff0c;背景的联想总部代理对象&#xff1a;也就是那个西安联想代理商代理模式&#xff1a;代理对象代理真实对象&#xff0c;达到增强真实对象功能的目的 实现方式&#xff1a; 静态代理&#xff1a;有一…

边缘计算网关

一、项目整体框架图 二、项目整体描述 边缘计算网关项目主要实现了智能家居场景和工业物联网场景下设备的数据采集和控制。 整个项目分为三大层&#xff1a;用户接口层、网关层、设备层。 其中用户层通过QT客户端、WEB界面及阿里云提供数据展示和用户接口。 网关使用虚拟机代替…

ArcGIS Engine:实现Shp/Mxd数据的加载、图层的简单查询

本博客参考&#xff1a;BiliBili UP主 <羊羊旸> &#xff1a; Arcgis Engine学习 目录 01 加载控件以及控件的基本信息等调整 02 编写 <菜单-地图控件> 中各个子工具的代码 2.1 加载Shapefile数据-代码 2.2 加载地图文档数据-代码 2.3 获取图层数量-代码 2.…

如何从零开始系统的学习项目管理?

一、项目的概念 根据项目管理协会&#xff08;PMI&#xff09;的定义&#xff0c;项目是指为了创造独特的产品、服务或成果而进行的临时性工作。这意味着项目需要有明确的目标&#xff0c;且不是日常重复性工作。尽管项目是临时性工作&#xff0c;但它所交付的成果可能会持续存…

汽车冲压车间的RFID技术设计解决方案

一、RFID技术的基本原理 RFID技术是一种利用非接触式自动识别的技术&#xff0c;通过将RFID标签放置在被识别物品上&#xff0c;并使用RFID读写器对标签进行扫描和识别&#xff0c;实现对物品的自动识别和追踪。RFID标签分为被动式和主动式两种。被动式标签无内置电源&#xf…

解决远程git服务器路径改变导致本地无法push的问题

解决远程git服务器路径改变导致本地无法push的问题 &#xff08;1&#xff09;第一步&#xff1a;查看git配置 git config -l&#xff08;2&#xff09;第二步&#xff1a;删除远程git地址 git remote remove origin&#xff08;3&#xff09;第三步&#xff1a;再次查看git配…

Vue3 + Ts实现NPM插件 - 定制loading

目录 你的 Loading&#x1f916; 安装&#x1f6f9; 简介苍白请 您移步文档&#xff1a;✈️ 使用方法&#x1f6e0;️ 配置 loading 类型&#x1f3b2; 定制 loading 色彩 &#x1f4a1; 注意事项 前期回顾 你的 Loading 开箱即可用的 loading&#xff0c; 说明&#xff1a;vu…

Java练习题-用冒泡排序法实现数组排序

✅作者简介&#xff1a;CSDN内容合伙人、阿里云专家博主、51CTO专家博主、新星计划第三季python赛道Top1&#x1f3c6; &#x1f4c3;个人主页&#xff1a;hacker707的csdn博客 &#x1f525;系列专栏&#xff1a;Java练习题 &#x1f4ac;个人格言&#xff1a;不断的翻越一座又…

MySql017——组合查询UNION和UNION ALL

一、UNION作用 可用UNION操作符来组合数条SQL查询。 二、UNION 使用规则 1、UNION的使用很简单。所需做的只是给出每条SELECT语句&#xff0c;在各条语句之间放上关键字UNION。2、UNION必须由两条或两条以上的SELECT语句组成&#xff0c;语句之间用关键字UNION分隔&#xff…

Mac mov转mp4,详细转换步骤

Mac mov转mp4怎么转&#xff1f;视频文件格式为.mov是由Apple公司所开发的特殊格式。因其只能在苹果设备上播放&#xff0c;与他人分享时就会变得困难。为此&#xff0c;我们通常会选择使用MP4这种最受欢迎的视频格式。在日常使用中&#xff0c;MP4成为了大家首选的视频格式。而…

Vulnhub系列靶机-The Planets Earth

文章目录 Vulnhub系列靶机-The Planets: Earth1. 信息收集1.1 主机扫描1.2 端口扫描1.3 目录爆破 2. 漏洞探测2.1 XOR解密2.2 解码 3. 漏洞利用3.1 反弹Shell 4. 权限提升4.1 NC文件传输 Netcat&#xff08;nc&#xff09;文件传输 Vulnhub系列靶机-The Planets: Earth 1. 信息…

【管理运筹学】第 9 章 | 网络计划(1,网络图的组成及绘制)

文章目录 引言一、网络图的组成及绘制1.1 网络图的组成1. 基本要素2. 线路与关键线路3. 网络图的类型 1.2 网络图的绘制1. 画图原则2. 绘图一般步骤 写在最后 引言 大纲里关于网络计划这一章的描述&#xff0c;就两个&#xff0c;一个是基本概念&#xff1a;网络计划、时间参数…

计算机竞赛 题目:基于深度学习的中文对话问答机器人

文章目录 0 简介1 项目架构2 项目的主要过程2.1 数据清洗、预处理2.2 分桶2.3 训练 3 项目的整体结构4 重要的API4.1 LSTM cells部分&#xff1a;4.2 损失函数&#xff1a;4.3 搭建seq2seq框架&#xff1a;4.4 测试部分&#xff1a;4.5 评价NLP测试效果&#xff1a;4.6 梯度截断…

API网关是什么?

API网关是什么&#xff1f; API网关很多人都知道它的实现原理&#xff0c;但是并不清楚它存在的意义和背景是什么&#xff0c;这里我给大家通俗易懂地讲解下&#xff01;举个例子&#xff0c;假设你正在开发一个电商网站&#xff0c;那么这里会涉及到很多后端的微服务&#xf…

排序算法之【归并排序】

&#x1f4d9;作者简介&#xff1a; 清水加冰&#xff0c;目前大二在读&#xff0c;正在学习C/C、Python、操作系统、数据库等。 &#x1f4d8;相关专栏&#xff1a;C语言初阶、C语言进阶、C语言刷题训练营、数据结构刷题训练营、有感兴趣的可以看一看。 欢迎点赞 &#x1f44d…

postman测试文件上传接口教程

postman是一个很好的接口测试软件&#xff0c;有时候接口是Get请求方式的&#xff0c;肯定在浏览器都可以测了&#xff0c;不过对于比较规范的RestFul接口&#xff0c;限定了只能post请求的&#xff0c;那你只能通过工具来测了&#xff0c;浏览器只能支持get请求的接口&#xf…

【计算机网络】poll | epoll

文章目录 1. pollpoll函数参数解析代码解析PollServer代码 poll 特点 2. epoll认识接口epoll_createepoll_ctlepoll_wait 基本原理红黑树就绪队列 1. poll poll函数参数解析 输入 man poll poll的第一个参数是文件描述符 poll的第二个参数为 等待的多个文件描述符(fd)数字层面…

点云分割segmentation

点云分割是根据空间、几何和纹理等特征对点云进行划分&#xff0c;使得同一划分区域内的点云拥有相似的特征 。点云的有效分割往往是许多应用的前提。例如&#xff0c;在逆向工程CAD/CAM 领域&#xff0c;对零件的不同扫描表面进行分割&#xff0c;然后才能更好地进行孔洞修复、…