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

题目链接

Leetcode.260 只出现一次的数字 III mid

题目描述

给你一个整数数组 n u m s nums 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 \leq nums.length \leq 3 * 10^4 2nums.length3104
  • - 2 31 ≤ n u m s [ i ] ≤ 2 31 − 1 2^{31} \leq nums[i] \leq 2^{31} - 1 231nums[i]2311
  • 除两个只出现一次的整数外, n u m s nums nums 中的其他数字都出现两次

解法:位运算

由于 n u m s nums nums 中只有两个数 x x x y y y 分别出现一次,其他元素都出现了两次。

所以直接对整个 n u m s nums nums 进行 异或,最后的结果实际上就是 x x o r y x \quad xor \quad y xxory,因为相同的元素异或为0。

假设此时的 x = 3 = ( 0011 ) 2 , y = 5 = ( 0101 ) 2 x = 3 = (0011)_2 , y = 5 = (0101)_2 x=3=(0011)2,y=5=(0101)2 , 异或的结果为 t = 6 = ( 0110 ) 2 t = 6 = (0110)_2 t=6=(0110)2

假设 t t t 的第 k k k 二进制位为 1 1 1 得话,说明要么是 x x x k k k 个二进制位为 1 1 1;说明要么是 y y y k k k 个二进制位为 1 1 1。不可能同时为 1 1 1

所以通过这个 ,我们就可以将 x x x y y y 分开。因为直接将 x x x y y y 2 k − 1 2^{k - 1} 2k1 分别进行 与操作,结果分别为 2 k − 1 2^{k - 1} 2k1 0 0 0

另外,由于其他元素都是成对出现的,所以每一对元素对 2 k − 1 2^{k - 1} 2k1 进行 与操作,结果都是一样的,也就是他们会被分到同一组。

假设结果 t = ( 101011100010 ) 2 t = (101011100010)_2 t=(101011100010)2,使用任何一个 1 1 1 来进行上述的操作其实都可以的,想用哪个就用哪个。不过为了方便起见,直接使用最低位的那个 1 1 1 ,也就是 t = ( 101011100010 ) 2 t = (1010111000 \mathbf{1}0)_2 t=(101011100010)2

我们可以通过以下操作得到 t t t 最低位的 1 1 1

int k = t & (-t);t = 1010 1110 0010&
-t = 0101 0001 11100000 0000 0001

时间复杂度: O ( n ) O(n) O(n)

C++代码:

class Solution {
public:vector<int> singleNumber(vector<int>& nums) {unsigned int t = 0;for(auto x:nums) t ^= x;int k = t & ( -t);vector<int> ans(2);for(auto x:nums){if((x & k) == k) ans[0] ^= x;else ans[1] ^= x;}return ans;}
};

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

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

相关文章

Pycharm中终端不显示虚拟环境名解决方法

文章目录 一、问题说明&#xff1a;二、解决方法&#xff1a;三、重启Pycharm 一、问题说明&#xff1a; Pycharm中打开项目配置完需要的虚拟环境后&#xff0c;在Terminal&#xff08;终端&#xff09;中无法切换及显示当前需要运行代码的虚拟环境。 比如以下一种情况&#…

SaaS系统用户权限设计

SaaS系统用户权限设计 学习目标&#xff1a; 理解RBAC模型的基本概念及设计思路 了解SAAS-HRM中权限控制的需求及表结构分析完成组织机构的基本CRUD操作 完成用户管理的基本CRUD操作完成角色管理的基本CRUD操作 组织机构管理 需求分析 需求分析 实现企业组织结构管理&#xff0…

基于 nodejs+vue网上考勤系统

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性&#xff1a;…

【c++】向webrtc学比较2: IsNewerSequenceNumber 用于NackTracker及测试

LatestSequenceNumber inline uint16_t LatestSequenceNumber(uint16_t sequence_number1,uint16_t sequence_number2) {return IsNewerSequenceNumber(sequence_number1, sequence_number2)? sequence_number1: sequen

QQd挂源码已更新最新加速项目程序全开源

1、99 公益日活动加速任务已全部完成适配&#xff0c;空间公益说说和评论并分享小世界内容任务在已有的功能上进行挂机&#xff0c; 其中【发小世界】功能暂时更名为【公益小世界】。 2、上线新功能【公益答题】用于完成参加 Qbox 公益答题任务&#xff0c;等级套装有任意一项…

【Linux】介绍 Docker 的基本概念和优势,以及在应用程序开发中的实际应用

Docker 是一种轻量级的虚拟化技术&#xff0c;它基于 Linux 容器技术&#xff0c;能够在不同平台、不同主机上快速地运行和部署应用程序。Docker 的基本概念包括以下几点&#xff1a; 镜像&#xff08;Image&#xff09;&#xff1a;Docker 镜像是一个只读的模板&#xff0c;它…

高质量床上用品类网站带手机端的pbootcms模板

模板介绍&#xff1a; 这是一个基于PbootCMS内核开发的床上用品类网站模板&#xff0c;专为床上用品、家用纺织类企业设计和开发。它不仅提供了网站界面简洁简单、易于管理的特点&#xff0c;还附带了测试数据&#xff0c;方便用户进行演示和学习。 模板特点&#xff1a; 采用…

react写一个简单的3d滚轮picker组件

1. TreeDPicker.tsx文件 原理就不想赘述了, 想了解的话, 网址在: 使用vue写一个picker插件,使用3d滚轮的原理_vue3中支持3d picker选择器插件-CSDN博客 import React, { useEffect, useRef, Ref, useState } from "react"; import Animate from "../utils/an…

城市生命线专题周丨宏电燃气管线智慧化运营解决方案,助力燃气安全运营高质量发展

方案背景 随着我国城市发展建设速度的加快和国家能源结构的调整&#xff0c;天燃气走进了千家万户&#xff0c;燃气门站和城市燃气管网规模越来越庞大。此外&#xff0c;近年燃气泄漏导致的大型爆炸事件频发&#xff0c;给人民的生命安全和财产安全带来灾难性伤害。 行业痛点 …

c语言从入门到实战——C语言数据类型和变量

C语言数据类型和变量 前言1. 数据类型介绍1.1 字符型1.2 整型1.3 浮点型1.4 布尔类型1.5 各种数据类型的长度1.5.1 sizeof操作符1.5.2 数据类型长度1.5.3 sizeof中表达式不计算 2. signed 和 unsigned3. 数据类型的取值范围4. 变量4.1 变量的创建4.2 变量的分类 5. 算术操作符&…

黑马JVM总结(三十五)

&#xff08;1&#xff09;JMM-有序性-问题 &#xff08;2&#xff09;JMM-有序性-解决 使用maven重新编译&#xff1a; 生成两个jar包 运行这个jar包&#xff1a; 再次执行上述结果&#xff1a;0出现的次数为0了 &#xff08;3&#xff09;JMM-有序性-理解 &#xff08;4&am…

Raiden Network(二)—— Mediated transfers(多跳支付里的中介传输)

什么是Mediated transfers 在雷电网络中&#xff0c;节点可以通过中间节点进行Mediated transfers向其他节点进行支付。Mediated transfers的步骤&#xff1a; Allocation&#xff08;分配&#xff09;&#xff1a; 使用锁定的转移消息&#xff08;locked transfer message&am…

Vue-props配置功能

Vue-props配置功能 props概述 功能&#xff1a;接收从其他组件传过来的数据&#xff0c;将数据从静态转为动态注意&#xff1a; 同一层组件不能使用props&#xff0c;必须是父组件传子组件的形式。父组件传数据&#xff0c;子组件接收数据。不能什么数据都接收&#xff0c;可…

【LeetCode】29. 两数相除

1 问题 给你两个整数&#xff0c;被除数 dividend 和除数 divisor。将两数相除&#xff0c;要求 不使用 乘法、除法和取余运算。 整数除法应该向零截断&#xff0c;也就是截去&#xff08;truncate&#xff09;其小数部分。例如&#xff0c;8.345 将被截断为 8 &#xff0c;-…

新增Node.js运行环境、新增系统缓存清理功能,1Panel开源面板v1.7.0发布

2023年10月16日&#xff0c;现代化、开源的Linux服务器运维管理面板1Panel正式发布v1.7.0版本。 在这个版本中&#xff0c;1Panel新增Node.js运行环境&#xff1b;新增系统缓存清理功能&#xff1b;应用安装时支持选择远程数据库。此外&#xff0c;我们进行了40多项功能更新和…

竞赛 深度学习OCR中文识别 - opencv python

文章目录 0 前言1 课题背景2 实现效果3 文本区域检测网络-CTPN4 文本识别网络-CRNN5 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; **基于深度学习OCR中文识别系统 ** 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;…

易天光通信推出100G BIDI ER光模块最新解决方案

随着数字信息时代的快速发展&#xff0c;网络通信技术的迅猛进步成为推动科技创新和产业升级的重要引擎之一。作为光通信行业的新秀&#xff0c;近期易天光通信推出了全新的100G BIDI ER1 Lite光模块和100G BIDI LR1 Lite光模块&#xff0c;助力崭新的未来网络建设。 易天光通…

C#网络爬虫实例:使用RestSharp获取Reddit首页的JSON数据并解析

Reddit 是一个非常受欢迎的分享社交新闻聚合网站&#xff0c;用户可以在上面发布和内容。我们的目标是抓取 Reddit 首页的数据 JSON&#xff0c;以便进一步分析和使用。 C#技术概述&#xff1a;C#是一种流行的编程语言&#xff0c;它具有流畅流畅的特点&#xff0c;非常适合开发…

【Java】字符串中的数据排序

需求&#xff1a;有一个字符串&#xff1a;“97&#xff0c;16&#xff0c;36&#xff0c;18&#xff0c;50”&#xff0c;请写程序实现最终输出结果是&#xff1a;“16&#xff0c;18&#xff0c;36&#xff0c;50&#xff0c;97” 思路&#xff1a; 将字符串按照逗号分割成一…

centos7安装erlang23.3.4.11及rabbitmq3.9.16版本

rpm包有系统版本要求&#xff0c;el是Red Hat Enterprise Linux(EL)的缩写。 EL7是Red Hat 7.x&#xff0c;Centos 7.x EL8是Red Hat 8.x, Centos 8.x 所以我们在安装erlang及rabbitmq时需要选择与自己的服务器相对应的rpm包 # rabbitmq的rpm安装包 https://github.com/rabbi…