当前位置: 首页 > news >正文

算法的学习笔记—数组中只出现一次的数字(牛客JZ56)

在这里插入图片描述

img

😀前言
在数组中寻找只出现一次的两个数字是一道经典的问题,通常可以通过位运算来有效解决。本文将详细介绍这一问题的解法,深入解析其背后的思路。

🏠个人主页:尘觉主页

文章目录

  • 🥰数组中只出现一次的数字
    • 题目链接
    • 😊问题描述
    • ❤️‍🔥解题思路
    • 😀Java 实现
      • 复杂度分析
    • 😄总结

🥰数组中只出现一次的数字

题目链接

牛客网

😊问题描述

给定一个整型数组,其中除了两个数字以外,其他数字均出现两次,目标是找出这两个只出现一次的数字。以数组 nums 为例:[x, x, y, y, z, k],其中 x、y 出现两次,而 z 和 k 各自只出现一次。

❤️‍🔥解题思路

  1. 利用异或运算

    • 异或运算的性质是相同的数字异或为 0,0 与任意数字异或的结果为该数字本身。根据这个性质,我们可以对数组中的所有元素进行异或操作。最终得到的结果将是这两个只出现一次的数字的异或结果。
    • 举个例子,对于数组 numsx ^ x ^ y ^ y ^ z ^ k = 0 ^ 0 ^ z ^ k = z ^ k
  2. 分离这两个数字

    • 由于 zk 是不同的,z ^ k 的结果必然是一个非零的值。我们需要找到 zk 在二进制表示上的一个不同的位。
    • 我们可以通过 diff = (z ^ k) & -(z ^ k) 来找到 diff,其中 diff 表示 zk 在二进制中最右侧为 1 的位。这个位的存在可以将数组中的数字分为两类,分别与 diff 进行异或运算。
  3. 遍历数组分组异或

    • 再次遍历数组,根据与

      diff
      

      的异或结果将数字分为两组:

      • 如果 num & diff == 0,则将 num 与第一个结果变量(如 res[0])进行异或。
      • 否则,将 num 与第二个结果变量(如 res[1])进行异或。
    • 最终,res[0]res[1] 就是我们要找的两个数字。

😀Java 实现

以下是用 Java 语言实现的完整代码:

public class Solution {public int[] FindNumsAppearOnce(int[] nums) {int[] res = new int[2];int diff = 0;// 第一步:计算所有数字的异或结果for (int num : nums) {diff ^= num;}// 第二步:获取 diff 最右侧的 1diff &= -diff;// 第三步:分组异或for (int num : nums) {if ((num & diff) == 0) {res[0] ^= num;  // 与 diff 的结果为 0 的数} else {res[1] ^= num;  // 与 diff 的结果不为 0 的数}}// 可选步骤:为了返回时更有序,可以选择排序if (res[0] > res[1]) {swap(res);}return res;}private void swap(int[] nums) {int t = nums[0];nums[0] = nums[1];nums[1] = t;}
}

复杂度分析

  • 时间复杂度:O(n),需要遍历数组两次。
  • 空间复杂度:O(1),只使用了常量空间来存储结果。

😄总结

通过以上的步骤,我们可以高效地找出数组中只出现一次的两个数字。利用异或运算的特性,我们能够将问题转化为位运算,简化了复杂度。这种思路不仅适用于本题,也为解决类似的问题提供了重要的思路。

😁热门专栏推荐
想学习vue的可以看看这个

java基础合集

数据库合集

redis合集

nginx合集

linux合集

手写机制

微服务组件

spring_尘觉

springMVC

mybits

等等等还有许多优秀的合集在主页等着大家的光顾感谢大家的支持

🤔欢迎大家加入我的社区 尘觉社区

文章到这里就结束了,如果有什么疑问的地方请指出,诸佬们一起来评论区一起讨论😁
希望能和诸佬们一起努力,今后我们一起观看感谢您的阅读🍻
如果帮助到您不妨3连支持一下,创造不易您们的支持是我的动力🤞

img

相关文章:

算法的学习笔记—数组中只出现一次的数字(牛客JZ56)

😀前言 在数组中寻找只出现一次的两个数字是一道经典的问题,通常可以通过位运算来有效解决。本文将详细介绍这一问题的解法,深入解析其背后的思路。 🏠个人主页:尘觉主页 文章目录 🥰数组中只出现一次的数字…...

《Pyhon入门:07 map与filter函数的常用用法》

Pyhon入门之map与filter函数常用用法 一、 map函数的常用用法1. 基本用法2. 使用lambda表达式3. 多个可迭代对象4. 使用自定义函数5. 返回迭代器6. 与filter函数结合使用 二、 filter函数的常用用法 一、 map函数的常用用法 1. 基本用法 map()函数是Python内置的一个函数&…...

基于vue框架的的高校消防设施管理系统06y99(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能:设备分类,设备信息,维修人员,报修信息,维修进度,院系,消防知识,培训记录,培训信息,备件信息,备件申请,派发信息,采购信息 开题报告内容 基于Vue框架的高校消防设施管理系统开题报告 一、项目背景与意义 随着高校规模的不断扩大和校园建…...

ffmpeg视频滤镜:定向模糊-dblur

滤镜简述 dblur 官网链接 > https://ffmpeg.org/ffmpeg-filters.html#dblur 有一个模糊滤镜&#xff0c;我试了一下&#xff0c;没有感觉到它的特殊之处, 这里简单介绍一下。 滤镜使用 滤镜的参数 angle <float> ..FV.....T. set angle (from 0 t…...

【数据结构初阶】二叉树---堆

二叉树-堆的实现 一、树的概念&#xff08;什么是树&#xff09;二、二叉树的概念及结构2.1 二叉树的概念2.2 二叉树的性质2.3 二叉树存储结构 三、二叉树的顺序结构3.1 堆的概念及结构3.2 堆的向下调整算法3.3堆的创建 四、堆的代码实现4.1 堆的初始化4.2 堆的销毁4.3 堆的插入…...

Lucas带你手撕机器学习——决策树

一、决策树简介 决策树是一种基本的分类与回归方法&#xff0c;它通过树状结构对数据进行分类或预测。每个内部节点代表一个特征&#xff08;属性&#xff09;&#xff0c;每个分支代表特征的一个可能值&#xff0c;而每个叶子节点代表一个分类或预测值。由于其直观和易于理解…...

OpenIPC开源FPV之Ardupilot配置

OpenIPC开源FPV之Ardupilot配置 1. 源由2. 问题3. 分析3.1 MAVLINK_MSG_ID_RAW_IMU3.2 MAVLINK_MSG_ID_SYS_STATUS3.3 MAVLINK_MSG_ID_BATTERY_STATUS3.4 MAVLINK_MSG_ID_RC_CHANNELS_RAW3.5 MAVLINK_MSG_ID_GPS_RAW_INT3.6 MAVLINK_MSG_ID_VFR_HUD3.7 MAVLINK_MSG_ID_GLOBAL_P…...

合并数组的两种常用方法比较

在 JavaScript 中&#xff0c;合并数组的两种常用方法是使用扩展运算符 (...) 和使用 push 方法。 使用扩展运算符 this.items [...this.items, ...data.items]; 优点&#xff1a; 易于理解&#xff1a;使用扩展运算符的语法非常直观&#xff0c;表达了“将两个数组合并成一个…...

qt 下载安装

1. 官网地址 https://www.qt.io/ 2. 下载 使用邮箱注册账号&#xff0c;登录&#xff0c;后边安装时也用的到 登录后&#xff1a; 这里需要电话号验证&#xff0c;电话号需要正确的&#xff0c;其他随便填&#xff0c;电话号中国区前需要86&#xff0c; 验证后自动下载 …...

Oracle SQL Developer 同时打开多个table的设置

Oracle SQL Developer 同时打开多个table的设置 工具 》 首选项 》数据库 》对象查看器&#xff0c;勾选 “自动冻结对象查看器窗口”...

NVIDIA发布Nemotron-70B-Instruct,超越GPT-4o和Claude 3.5的AI模型

一、Nemotron-70B-Instruct 是什么 Nemotron-70B-Instruct 是由 NVIDIA 基于 Meta 的 Llama 3.1-70B 模型开发的先进大语言模型&#xff08;LLM&#xff09;。该模型采用了新颖的神经架构搜索&#xff08;Neural Architecture Search&#xff0c;NAS&#xff09;方法和知识蒸馏…...

死锁(Deadlock)C#

在多线程编程中&#xff0c;死锁&#xff08;Deadlock&#xff09;是一种非常常见的问题&#xff0c;通常发生在两个或多个线程相互等待对方持有的锁&#xff0c;导致它们都无法继续执行。要避免死锁&#xff0c;需要了解死锁的四个必要条件以及相应的解决策略。 死锁的形成 …...

前端-基础CSS 知识总结

1.书写位置:title 标签下方添加 style 双标签,style 标签里面书写 CSS 代码。 <title>CSS 初体验</title> <style>/* 选择器 { } */p {/* CSS 属性 */color: red;} </style><p>体验 CSS</p> <link rel="stylesheet" href=…...

最新版本jdbcutils集成log4j做详细sql日志、自动释放连接...等

maven坐标 <!-- MySQL 8 --><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><version>8.0.33</version></dependency><!-- Druid连接池 --><dependency><groupId&…...

jQuery快速填充非form数据

jQuery快速填充非form数据 先看看jQuery根据name填充form表单数据 <!DOCTYPE html> <html><head><script src"https://code.jquery.com/jquery-3.6.0.min.js"></script> </head><body><form id"myForm">…...

语音语言模型最新综述! 关于GPT-4o背后技术的尝试

近期,大型语言模型(LLMs)在生成文本和执行各种自然语言处理任务方面展现出了卓越的能力,成为了强大的AI驱动语言理解和生成的基础模型。然而&#xff0c;仅依赖于基于文本模态的模型存在显著局限性。这促使了基于语音的生成模型的发展,使其能够更自然、直观地与人类互动。 为了…...

根据用户选择的行和列数据构造数据结构(跨行跨列)

方案一 这段代码的功能是根据用户选择的行和列数据&#xff0c;生成一个适合复制粘贴的字符串表格。代码会先按列的 id 从小到大排序&#xff0c;再根据行列的选择关系将数据按顺序填入表格&#xff0c;每行之间使用换行符分隔&#xff0c;每列之间使用制表符分隔。如果某一行…...

Spark教程5-基本结构化操作

加载csv文件 df spark.read.format("json").load("/data/flight-data/json/2015-summary.json")Schema 输出Schema df.printSchema()使用Schema读取csv文件&#xff0c;以指定数据类型 from pyspark.sql.types import StructField, StructType, Strin…...

内置数据类型、变量名、字符串、数字及其运算、数字的处理、类型转换

内置数据类型 python中的内置数据类型包括&#xff1a;整数、浮点数、布尔类型&#xff08;以大写字母开头&#xff09;、字符串 变量名 命名变量要见名知意&#xff0c;确保变量名称具有描述性和意义&#xff0c;这样可以使得代码更容易维护&#xff0c;使用_可以使得变量名…...

Win/Mac/Android/iOS怎麼刪除代理設置?

設置代理設置的主要構成 IP 地址和端口 這些是代理伺服器配置的最基本組件。代理伺服器的IP地址引導互聯網流量&#xff0c;而端口號指定伺服器上的通信通道。 為什麼要刪除代理設置&#xff1f; 刪除代理設置通常是為了解決網路問題、提高速度、恢復安全性或過渡到新的網路…...

网络安全事件报告:从SolarWinds事件看全球合规挑战与应对策略

1. 事件回顾&#xff1a;SolarWinds事件为何成为安全领域的“分水岭”如果你在网络安全或IT运维领域工作&#xff0c;2020年底曝光的SolarWinds供应链攻击事件&#xff0c;绝对是一个绕不开的里程碑。它不像一次简单的数据泄露&#xff0c;更像是一场精心策划、潜伏已久的“数字…...

一分钟看懂大模型备案

大模型备案&#xff0c;全称 “生成式人工智能服务上线备案”&#xff0c;是国内面向公众提供大模型服务的法定合规流程&#xff0c;核心是审核模型安全、数据合规与内容可控&#xff0c;未备案违规上线最高罚一千万元&#xff0c;该处罚依据主要来自两大核心法规&#xff1a;1…...

Super IO插件:Blender文件操作效率革命,从繁琐拖拽到智能粘贴

Super IO插件&#xff1a;Blender文件操作效率革命&#xff0c;从繁琐拖拽到智能粘贴 【免费下载链接】super_io blender addon for copy paste import / export 项目地址: https://gitcode.com/gh_mirrors/su/super_io Super IO是一款革命性的Blender插件&#xff0c;通…...

如何永久保存微信聊天记录:5分钟学会WeChatMsg免费完整指南

如何永久保存微信聊天记录&#xff1a;5分钟学会WeChatMsg免费完整指南 【免费下载链接】WeChatMsg 提取微信聊天记录&#xff0c;将其导出成HTML、Word、CSV文档永久保存&#xff0c;对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/…...

Sora 2如何“唤醒”3D Gaussian Splatting?:从神经辐射场到毫秒级动态场景生成的4层技术跃迁解析

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Sora 2与3D Gaussian Splatting融合的范式革命 传统视频生成模型受限于体素网格或NeRF隐式表示的计算开销与几何保真度瓶颈&#xff0c;而Sora 2通过引入时空一致性token压缩机制&#xff0c;与3D Gaus…...

按类型搜索文件

rg -n "getState" --typec --typejava...

终极指南:EdgeDB内置迁移系统实现零停机数据库演进的完整方案

终极指南&#xff1a;EdgeDB内置迁移系统实现零停机数据库演进的完整方案 【免费下载链接】edgedb Gel supercharges Postgres with a modern data model, graph queries, Auth & AI solutions, and much more. 项目地址: https://gitcode.com/gh_mirrors/ed/edgedb …...

免费在线PPT制作工具PPTist:浏览器中的专业演示文稿创作平台

免费在线PPT制作工具PPTist&#xff1a;浏览器中的专业演示文稿创作平台 【免费下载链接】PPTist PowerPoint-ist&#xff08;/pauəpɔintist/&#xff09;, An online presentation application that replicates most of the commonly used features of MS PowerPoint, allow…...

别再只盯着快充了!聊聊交流充电桩(慢充)对电池寿命的友好设计

慢充才是真爱护&#xff1a;揭秘交流充电桩如何用"温柔算法"延长电池寿命 当大多数电动车车主还在为"充电5分钟续航200公里"的快充技术欢呼时&#xff0c;一群电池工程师和资深电车玩家却悄悄把家用充电桩调成了最低电流模式。这不是因为他们时间太多&…...

2026年全国优质化妆培训机构深度盘点

颜值经济持续升温背景下&#xff0c;2026年化妆行业迎来规范化、专业化发展新阶段&#xff0c;涵盖影视、时尚、婚庆等多个领域&#xff0c;市场对专业化妆人才的需求持续攀升。据相关行业数据显示&#xff0c;2026年美业职业培训市场预计保持11%以上增速&#xff0c;美业门店专…...