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

给定一整数数组,其中有p种数出现了奇数次,其他数都出现了偶数次,怎么找到这p个数?

给定一长度为m的整数数组

A=\left [ a_{1},a_{2}\cdots a_{m} \right ]

,其中有p种不为0的数出现了奇数次,其他数都出现了偶数次,找到这p个数。

要求:时间复杂度不大于O(n),空间复杂度不大于O(1)。


        由于时间复杂度不大于O(n),则不能在遍历数组中嵌套遍历数组。而空间复杂度不大于O(1),则不能开辟数量上优势或等势于数组长度的内存空间。这需要将数组元素的信息压缩到一个有限的内存空间里,因此需要按位运算。

        按位异或运算⊕是具有如下性质的二元运算:0⊕0=0,1⊕0=1,0⊕1=1,1⊕1=0,并且满足交换率、结合率。则0是⊕的单位元,即对于任意的二进制数a,都有a⊕0=0⊕a=a。而且a与自身互为逆元,即a⊕a=0。记

\begin{matrix} \overset{t}{\underset{i=1}{\bigoplus } }a_{i} \end{matrix}=\underset{t}{\underbrace{a_{1}\oplus a_{2}\oplus \cdots \oplus a_{t}}}

        那么,对于任意正整数k,有:

\begin{matrix} \overset{2k}{\underset{}{\bigoplus } }a \end{matrix}=\begin{matrix} \underbrace{a\oplus a\oplus \cdots \oplus a}\\ 2k \end{matrix}=\begin{matrix} \underbrace{\left ( a\oplus a \right )\oplus\left ( a\oplus a \right )\oplus \cdots\left ( a\oplus a \right ) }\\ k \end{matrix}=\begin{matrix} \underbrace{0\oplus0\oplus\cdots \oplus 0}\\ k \end{matrix}=0,

        \begin{matrix} \overset{2k+1}{\underset{}{\bigoplus } }a \end{matrix}=\begin{matrix} \underbrace{a\oplus a\oplus \cdots \oplus a}\\ 2k+1 \end{matrix}=\left (\begin{matrix} \overset{2k}{\underset{}{\bigoplus } }a \end{matrix} \right )\oplus a=a

        

        对于给定的这个题目,当p=1时,设\chi出现了2k+1次,其余的数都出现偶数次,则根据上述的结论有:

\bigoplus A=\begin{matrix} \overset{2k+1}{\underset{}{\bigoplus } }\chi \end{matrix}= \chi

        即将A中所有元素取异或运算即是此问题的解。

        当p=2时,取\bigoplus A=b,则必然b≠0,否则可以推出这两个数相等,从而产生悖论。取c=b\wedge \left (\bar{b}+1 \right )=2^{s-1},s为c的二进制表示中从后数第一个为1的位数。

        遍历集合A,使每个元素都和c做按位与运算,结果只能是0或者c。取结果为c的元素组成子集A',由于b的第s位是1,则两个目标数字不会都是A'的元素,否则经过⊕运算,s位的值是0的话,如果b中没有某位是1的数字,则b=0,从而产生矛盾。这样,就将问题转化成了在集合A'中查找只有一种非零整数出现奇数次的问题。即求出\chi _{1}=\bigoplus A'为其中的一个解。

        由于b=\chi _{1}\oplus \chi _{2},所以

\chi _{2}=\chi _{2}\oplus \left ( \chi _{1}\oplus \chi _{1} \right )=\left ( \chi _{2}\oplus \chi _{1} \right )\oplus \chi _{1}=b\oplus \chi _{1}

就是另一个解。

        当p\geqslant 3时,\bigoplus A可能不为0,也可能为0。比如A=\left [ 6,5,3 \right ],整体取二进制按位异或就是

110\oplus 101\oplus 011=0.所以当p\geqslant 3时需要对问题进行降阶拆解:

        continuing

相关文章:

给定一整数数组,其中有p种数出现了奇数次,其他数都出现了偶数次,怎么找到这p个数?

给定一长度为m的整数数组 ,其中有p种不为0的数出现了奇数次,其他数都出现了偶数次,找到这p个数。 要求:时间复杂度不大于O(n),空间复杂度不大于O(1)。 由于时间复杂度不大于O(n),则不能在遍历数组中嵌套遍…...

RICHTEK立锜科技 WIFI 7电源参考设计

什么是WIFI 7? WiFi 7(Wi-Fi 7)是下一代Wi-Fi标准,对应的是IEEE 802.11将发布新的修订标准IEEE 802.11be –极高吞吐量EHT(Extremely High Throughput )。Wi-Fi 7是在Wi-Fi 6的基础上引入了320MHz带宽、4096-QAM、Mu…...

CUDA编程00 - 配置CUDA开发环境

第一步: 在一台装有Nvidia显卡和驱动的机器上,用nvidia-smi命令查看显卡所支持cuda版本 第二步: 到Nvidia官网下载CUDA Toolkit并安装,CUDA Toolkit Archive | NVIDIA Developer 安装时按提示下一步即可,安装完成用 …...

HTML5大作业三农有机,农产品,农庄,农旅网站源码

文章目录 1.设计来源1.1 轮播图页面头部效果1.2 栏目列表页面效果1.3 页面底部导航效果 2.效果和源码2.1 源代码 源码下载万套模板,程序开发,在线开发,在线沟通 作者:xcLeigh 文章地址:https://blog.csdn.net/weixin_4…...

Spark的动态资源分配算法

文章目录 前言基于任务需求进行资源请求的整体过程资源申请的生成过程详解资源申请的生成过程的简单例子资源调度算法的代码解析 申请资源以后的处理:Executor的启动或者结束对于新启动的Container的处理对于结束的Container的处理 基于资源分配结果进行任务调度Pen…...

Python 爬虫技术 第06节 HTTP协议与Web基础知识

HTTP(Hypertext Transfer Protocol)是用于从Web服务器传输超文本到本地浏览器的传输协议。它是互联网上应用最为广泛的一种网络协议,几乎所有的网页数据都是通过HTTP协议进行传输的。下面,我将结合一个简单的Python案例来详细讲解…...

js | 原型链

为什么前者会输出Lucas 后者不会?call动作具体干了什么? http://dmitrysoshnikov.com/ecmascript/javascript-the-core/ function Foo(){this.bar"Lucas" } let obj{}; obj.__proto__Foo.prototype; Foo.call(obj) console.log(obj.bar); // 输出Lucas/…...

Volatility:分析MS10-061攻击

1、概述 # 1)什么是 Volatility Volatility是开源的Windows,Linux,MaC,Android的内存取证分析工具。基于Python开发而成,可以分析内存中的各种数据。Volatility支持对32位或64位Wnidows、Linux、Mac、Android操作系统…...

水表数字识别3:Pytorch CRNN实现水表数字识别(含训练代码和数据集)

水表数字识别3:Pytorch CRNN实现水表数字识别(含训练代码和数据集) 目录 水表数字识别3:Pytorch CRNN实现水表数字识别(含训练代码和数据集) 1.前言 2. 水表数字识别的方法 3. 水表数字识别数据集 4. 水表数字分割模型训练 5. 水表数字识别模型训…...

oracle数据文件损坏和误删dbf文件处理方法

加油,新时代打工人! 打开sqlplus sqlplus> “/as sysdba” (命令行登录sqlplus) SQL>shutdown abort; (关闭oracle数据库服务器) SQL>startup mount ;(挂载oracle数据库,这…...

postMessageXss续2

原文地址如下:https://research.securitum.com/art-of-bug-bounty-a-way-from-js-file-analysis-to-xss/ 在19年我写了一篇文章,是基于postMessageXss漏洞的入门教学:https://www.cnblogs.com/piaomiaohongchen/p/14727871.html 这几天浏览mXss技术的时候&#xff…...

【深度学习】sdxl的Lora训练技巧

在进行SDXL LoRA训练时,有一些技巧和最佳实践可以帮助你获得更好的结果。以下是一些重要的建议: 图像选择与标注: 选择多样化的高质量图像是关键,建议至少使用30到50张分辨率为1024x1024的图像【8†source】【9†source】。使用Vi…...

推荐一款 Android 手机端的 SSH 远程连接工具

https://andi.cn/page/621590.html...

3.1、matlab双目相机标定实验

1、双目相机标定原理及流程 双目相机标定是将双目相机系统的内外参数计算出来,从而实现双目视觉中的立体测量和深度感知。标定的目的是确定各个摄像头的内部参数(如焦距、主点、畸变等)和外部参数(如相机位置、朝向等),以便将双目相机捕获的图像转换为三维空间坐标。 双…...

IntelliJ IDEA 直接在软件中更新为最新版

当我们的 IDEA 工具许久没有更新,已经拖了好几个版本,想跨大版本更新,比如从2020.2.1 -> 2023.x.x 此时,我们菜单栏点击 Help -> Check for Updates… ,右下角会有提示更新,如下图: 点…...

库卡机器人示教器 KPC2 00107-264 KPC200.107-264

库卡驱动器是一种高性能的控制器,其作用类似于变频器在普通交流马达中的应用。它通过位置、速度和力矩三种方式对伺服马达进行控制,以满足各种高精度定位系统的需求。库卡驱动器是伺服系统的重要组成部分,广泛应用于各种工业自动化领域。 库…...

数据传输安全--VPN

目录 前置知识 VPN概念 VPN诞生的原因 VPN分类 根据建设的单位不同分类 企业自建的VPN 运营商搭建的VPN 根据组网方式不同来进行分类 Client to LAN VPN LAN to LAN VPN按层次划分 VPN常用技术 VPN的核心技术 VPN封装过程的角色 VPN包含的技术 身份认证技术 加…...

【人工智能】人工智能可解释性和透明度的详细探讨

人工智能的可解释性和透明度是当前AI领域的重要议题,它们对于AI系统的公正性、可靠性、用户信任以及合规性等方面都具有深远的影响。以下是对人工智能可解释性和透明度的详细探讨: 一、人工智能的可解释性 定义: 可解释性是指机器学习模型…...

vscode+wsl2+anaconda环境的配置与使用

目录 下载anaconda Anaconda使用参考 vscodeubuntuanaconda 先用vscode连接本地ubuntu。 如果没有安装wsl2与ubuntu,可点击下面的链接。 问题:wsl install 无法解析服务器 成功记录: 在vscode终端用ubuntu安装anaconda。 创建pytho…...

【Linux网络】套接字编程

本篇博客整理了 socket 套接字编程的相关内容,包括 socket 网络通信原理、socket 相关的系统调用接口等,分别演示了基于UDP协议、TCP协议的 socket 网络编程,旨在让读者更加深入理解网络通信原理和设计,对网络编程有初步的认识和掌…...

FastAPI 教程:从入门到实践

FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...

postgresql|数据库|只读用户的创建和删除(备忘)

CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...

ServerTrust 并非唯一

NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...

【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)

要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况,可以通过以下几种方式模拟或触发: 1. 增加CPU负载 运行大量计算密集型任务,例如: 使用多线程循环执行复杂计算(如数学运算、加密解密等)。运行图…...

企业如何增强终端安全?

在数字化转型加速的今天,企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机,到工厂里的物联网设备、智能传感器,这些终端构成了企业与外部世界连接的 “神经末梢”。然而,随着远程办公的常态化和设备接入的爆炸式…...

Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?

在大数据处理领域,Hive 作为 Hadoop 生态中重要的数据仓库工具,其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式,很多开发者常常陷入选择困境。本文将从底…...

音视频——I2S 协议详解

I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议,专门用于在数字音频设备之间传输数字音频数据。它由飞利浦(Philips)公司开发,以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...

【C++特殊工具与技术】优化内存分配(一):C++中的内存分配

目录 一、C 内存的基本概念​ 1.1 内存的物理与逻辑结构​ 1.2 C 程序的内存区域划分​ 二、栈内存分配​ 2.1 栈内存的特点​ 2.2 栈内存分配示例​ 三、堆内存分配​ 3.1 new和delete操作符​ 4.2 内存泄漏与悬空指针问题​ 4.3 new和delete的重载​ 四、智能指针…...

淘宝扭蛋机小程序系统开发:打造互动性强的购物平台

淘宝扭蛋机小程序系统的开发,旨在打造一个互动性强的购物平台,让用户在购物的同时,能够享受到更多的乐趣和惊喜。 淘宝扭蛋机小程序系统拥有丰富的互动功能。用户可以通过虚拟摇杆操作扭蛋机,实现旋转、抽拉等动作,增…...

Qt 事件处理中 return 的深入解析

Qt 事件处理中 return 的深入解析 在 Qt 事件处理中,return 语句的使用是另一个关键概念,它与 event->accept()/event->ignore() 密切相关但作用不同。让我们详细分析一下它们之间的关系和工作原理。 核心区别:不同层级的事件处理 方…...