( 位运算 ) 260. 只出现一次的数字 III ——【Leetcode每日一题】

news2024/9/23 7:27:22

❓260. 只出现一次的数字 III

难度:中等

给你一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次。 找出只出现一次的那两个元素。你可以按 任意顺序 返回答案。

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

示例 1:

输入:nums = [1,2,1,3,2,5]
输出:[3,5]
解释:[5, 3] 也是有效的答案。

示例 2:

输入:nums = [-1,0]
输出:[-1,0]

示例 3:

输入:nums = [0,1]
输出:[1,0]

提示:

  • 2 < = n u m s . l e n g t h < = 3 ∗ 1 0 4 2 <= nums.length <= 3 * 10^4 2<=nums.length<=3104
  • − 2 31 < = n u m s [ i ] < = 2 31 − 1 -2^{31} <= nums[i] <= 2^{31} - 1 231<=nums[i]<=2311
  • 除两个只出现一次的整数外,nums 中的其他数字都出现两次

💡思路:异或

算法要求时间复杂度是 O ( N ) O(N) O(N),时间复杂度是 O ( 1 ) O(1) O(1) 所以不可以通过暴力解法来解决该题,就考虑是否可以通过位运算求解!

基础知识必知:位运算基本原理

对数组中的数字进行 异或 运算,那么最后的结果一定是只出现一次的两个数字的异或运算结果

假设只出现一次的两个数是 xy 那么最后的结果是x ^ y

  1. 因为xy 是不相同的,所以他们肯定在二进制有不同的1值;
  2. 可以使用 (x ^ y) & (- x ^ y)得到 最低的那一位 1:
    • 根据该位置是否为 1,将数组中的数字分成两组;
    • 对这两组分别做异或运算,就可得到只出现一次的两个值!

🍁代码:(Java、C++)

Java

class Solution {
    public int[] singleNumber(int[] nums) {
        int diff = 0;
        for(int num : nums) diff ^= num;
        // 防止溢出
        diff = (diff == Integer.MIN_VALUE) ? 1 : diff & (-diff);//得到最低那一位1
        int[] ans = new int[2];
        for(int num : nums){
            if((num & diff) == diff){
                ans[0] ^= num;
            }else{
                ans[1] ^= num;
            }
        }
        return ans;
    }
}

C++

class Solution {
public:
    vector<int> singleNumber(vector<int>& nums) {
        int diff = 0;
        for(int num : nums) diff ^= num;
        // 防止溢出
        diff = (diff == INT_MIN) ? 1 : diff & (-diff);//得到最低那一位1
        vector<int> ans(2);
        for(int num : nums){
            if((num & diff) == diff){
                ans[0] ^= num;
            }else{
                ans[1] ^= num;
            }
        }
        return ans;
    }
};

🚀 运行结果:

在这里插入图片描述

🕔 复杂度分析:

  • 时间复杂度 O ( n ) O(n) O(n),其中 n 为数组nums的长度。
  • 空间复杂度 O ( 1 ) O(1) O(1)

题目来源:力扣。

放弃一件事很容易,每天能坚持一件事一定很酷,一起每日一题吧!
关注我 leetCode专栏,每日更新!

注: 如有不足,欢迎指正!

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

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

相关文章

精炼计算机网络——数据链路层(一)

文章目录 前言3.1 数据链路和帧3.1.1 数据链路和帧3.1.2 三个基本问题 总结 前言 上篇文章&#xff0c;我们一同学完了物理层的全部内容&#xff0c;在本篇文章中&#xff0c;我们初步学习数据链路层&#xff0c;理解数据链路和帧的相应概念&#xff0c;知晓封装成帧&#xff…

信号完整性分析基础知识之传输线和反射(五):较短阻抗不连续的传输线、残桩和末端容性负载引起的反射

首先来一首定场诗&#xff1a;难难难&#xff0c;道德玄&#xff0c;不对知音不可谈。对了知音谈几句&#xff0c;不对知音枉费舌尖。 较短不连续点引起的反射 很多时候&#xff0c;板载走线的宽度必须要收窄&#xff0c;特别是经过PF区域或者拥挤区域。如果传输线的某一小段…

eSIM证书要求-证书验证-EID

SM-DP 和 SM-DS 应该验证 EUM 和 eUICC 证书中限制的 IIN 和 EID 的一致性&#xff08;参见第 4.5.2.1.0.2 和 4.5.2.1.0.3 节&#xff09;&#xff0c;并考虑 SGP.29 [ 89]。 根据 SGP.29 [89] 颁发的 EID 没有 SGP.02 [2] 中定义的 8 位 IIN。 相反&#xff0c;它们具有可变长…

【计算机视觉 | Python】十个 Python 图像处理工具,建议点赞收藏

文章目录 一、前言二、常见的库2.1 scikit-image2.2 NumPy2.3 SciPy2.4 PIL / Pillow2.5 OpenCV-Python2.6 SimpleCV2.7 Mahotas2.8 SimpleITK2.9 pgmagick2.10 Pycairo 一、前言 这些 Python 库提供了一种简单直观的方法来转换图像并理解底层数据。 今天的世界充满了数据&am…

linux【网络编程】之UDP网络程序模拟实现

linux【网络编程】之UDP网络程序模拟实现 一、开发环境二、服务端实现2.1 接口认识2.1.1 socket创建网络通信套接字2.1.2 bind&#xff1a;绑定Ip和端口号2.1.3 sockaddr_in结构体2.1.4 IP地址转换函数&#xff1a;inet_addr、inet_ntoa2.1.5 recvfrom&#xff1a;读取数据 2.2…

大语言模型进化树重磅发布,感慨技术方向选择的残酷,文末有彩蛋

文 / 高扬&#xff08;微信公众号&#xff1a;量子论&#xff09; 今天说点有深度的内容。五一假期&#xff0c;学习了一篇论文《Harnessing the Power of LLMs in Practice: A Survey on ChatGPT and Beyond》。 这篇论文来自 Amazon 以及 Texas A&M University 研究团队&…

【2023 · CANN训练营第一季】应用开发深入讲解——第五章 端到端案例讲解

学习资源 样例介绍 使用DVPP加速预处理网络输入&#xff0c;并通过模型转换使能静态AIPP功能&#xff0c;使能AIPP功能后&#xff0c;YUV420SP_U8格式图片转化为RGB&#xff0c;然后减均值和归一化操作&#xff0c;并将该信息固化到转换后的离线模型中&#xff0c;对ResNet50…

传统IDC服务器迁移上云流程

上云是趋势&#xff0c;越来越多企业的IDC服务器选择迁移上云&#xff0c;迁移上云的方式有很多&#xff0c;阿里云提供服务器迁移中心SMC来帮助用户迁移上云。使用SMC服务器迁移中心&#xff0c;将您的源服务器方便快捷地迁移至阿里云&#xff0c;支持的迁移源类型包括IDC服务…

【Java EE 初阶】锁策略以及CAS问题

目录 1.常见的锁策略 1.乐观锁 vs 悲观锁 2.读写锁 3.重量级锁 vs 轻量级锁 4.自旋锁&#xff08;Spin Lock&#xff09; 5.公平锁 vs 非公平锁 6.可重入锁 vs 不可重入锁 7.Synchronized实现了哪些锁策略&#xff1f; 1.是乐观锁也是悲观锁 2.既是轻量级锁也是重量级…

K_A37_005 基于STM32等单片机驱动ADS1115 ADC模块 串口与OLED0.96双显示

K_A37_005 基于STM32等单片机驱动ADS1115 ADC模块 串口与OLED0.96双显示 所有资源导航一、资源说明二、基本参数参数引脚说明 三、驱动说明IIC时序对应程序: 四、部分代码说明1、接线引脚定义1.1、STC89C52RCADS1115 ADC模块1.2、STM32F103C8T6ADS1115 ADC模块 五、基础知识学习…

解决“未在本地计算机注册“OraOLEDB.Oracle.1”提供程序“问题

由于本地使用Oracle.ManagedDataAccess批量插入问题&#xff0c;连接数据库时报错 : ProviderOraOLEDB.Oracle;Data Sourceorcl;User IdQueueDp;PasswordQueueDp 此问题之前解决过没记录&#xff0c;又遇到了&#xff0c;忘了怎么解决&#xff0c;试了很多没效果 解决办法一、…

用好git stash,工作超nice

一、介绍 如果修改后的内容还不想commit&#xff0c;就可以用git stash命令。它会将工作区和暂存区中的修改(也就是还没commit的内容)都会被保存到堆栈里&#xff0c;并在之后恢复到任意指定的分支上。 二、应用场景 1、在分支a进行开发feature 1时&#xff0c;突然需要紧急…

2、Orangepi Zero2刷机和系统启动

目录 2.1 工具安装 2.2 刷机 2.3 登录系统 2.4 修改登陆密码 2.5 网络配置 2.6 SSH登陆开发板 就像买了电脑&#xff0c;出厂带有 windows 操作系统&#xff0c;才算是正在的电脑&#xff0c;开发板需要烧写对应的系统固件&#xff0c;才 能正常发挥作用 工具 Orangepi Zero2…

【异常解决】浏览器无法访问此网站ERR_UNSAFE_PORT/网页可能无法连接,或者它已永久性地移动到了新网址问题解决方案

浏览器无法访问此网站ERR_UNSAFE_PORT问题解决方案 一、问题描述二、问题原因三、解决方案3.1 方案1修改服务器访问端口号&#xff08;推荐&#xff09;3.2 方案2修改浏览器设置3.2.1 Chrome浏览器3.2.2 Firefox浏览器3.2.3 Edge浏览器 一、问题描述 访问某一个特定的网址之后…

Flume系列:Flume Channel使用

目录 Apache Hadoop生态-目录汇总-持续更新 1&#xff1a;Kafka Channel 2&#xff1a;File Channel 3&#xff1a;Memory Channel Apache Hadoop生态-目录汇总-持续更新 系统环境&#xff1a;centos7 Java环境&#xff1a;Java8 1&#xff1a;Kafka Channel Kafka Chan…

vim键位图+vim基本操作命令表

前言&#xff1a;本章末vim的基本操作命令总结的比较全&#xff0c;建议收藏起来&#xff0c;方便后面使用时作字典查找。 目录 一、什么是vi(vim)&#xff1f; vim键盘 二、vim工作模式 1&#xff09;命令模式 2&#xff09;编辑模式 3&#xff09;末行模式 4&#xf…

「2024」预备研究生mem-等差数列基础

一、等差数列基础 二、课后练习题 思路&#xff0c;知道a1和d &#xff0c;就可以知道an,sn

Kafka 集成 SpringBoot, 快速入门

一、kafka的生产者和消费者 1. 生产者发送消息的流程 2. 消费者接收消息的流程 二、 java 代码实现 1. 添加依赖&#xff1a; <dependency><groupId>org.apache.kafka</groupId><artifactId>kafka_2.12</artifactId></dependency>2. 实现…

回溯算法例题(剪枝策略)

目录 1.组合1.77. 组合2.216. 组合总和 III3.17. 电话号码的字母组合4.39. 组合总和5.40. 组合总和 II 2.分割1.131. 分割回文串2.*93. 复原 IP 地址 3.子集1.78. 子集2.90. 子集 II 4.排列1.46. 全排列2.47. 全排列 II 5.棋盘问题1.51. N 皇后2.37. 解数独 6.其他1.491. 递增子…

系统移植 5-10

1.进入linux内核源码目录下&#xff0c;打开Makefile文件&#xff0c;搜索vmlinux&#xff0c;找到cmd_link-vmlinux命令&#xff0c; 1179 cmd_link-vmlinux \ 1180 $(CONFIG_SHELL) $< "$(LD)" "…