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

一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字

这里写目录标题

  • 问题详情
  • 分析问题
  • 代码展示

问题详情

剑指 Offer 56:

一个整型数组 nums 里除两个数字之外,其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。

示例:

输入:nums = [4,1,4,6]
输出:[1,6] 或 [6,1]

分析问题

首先我们知道两个相同的数异或结果是0,而0异或任何数都是不变的;,而且异或运算是支持交换律和结合律;

C语言中的异或符号是’^’

如:353=335=0^5=5;

那如果数组nums中只有一个数出现一次,其它的数都出现了两次,那我们将所有的数组元素进行异或运算,不就可以得出结果了吗?

但是,在这里有两个只出现一次的数字,我们该怎么办呢,如果我们也将其所有的数组元素都异或在一起,那得出的数是不是就是那两个出现一次的数字异或的结果:

例:[1,1,2,3,4,4,5,5]

2 = 0010;3 = 0011

所以1123445^5 = 023 = 0001 = 1

那我们能不能将这两个数分开来呢?使这两个单独出现的数在它们所在的数组都是单独存在的。再分别异或,就能得出这两个数。
在这里插入图片描述

那如何分出这两个数呢:

我们先把数组nums中所有元素异或起来。

1123445^5 = 023 = 0011^0010 = 0001

相同的数异或为0,0与非0数异或为非0数本身。 所以,全部异或在一起就等价于两个单独数异或.

异或得出值0001,设这个值为ret 。通过观察可以发现,ret为1的位,就说明两个单独数的相同位是不同的。要么是1要么是0。不可能重复。

那我们如何去找到为1的位:

我们定义一个变量m = 1;将1(00000000000000000000000000000001)不断地左移m位,与ret进行&运算,如果结果为非0,那此时,1对应的位就是1向左移m位对应1的位置:

在这里插入图片描述

回到刚刚的数组:通过这个为1的位,和原数组中所有元素进行&运算,就可以把两个单独出现的数分开。其他出现两次的数因为二进制值相同也会共同出现在同一边。

在这里插入图片描述

到这我们写出这个程序就不难了。

代码展示

int* singleNumbers(int* nums, size_t numsSize, int* returnSize) {int ret = 0;int i = 0;//保存单独出现的数异或在一起的值for (i = 0; i < numsSize; i++){ret ^= nums[i];}int m = 0;//从低向高位找到ret中第m位为1的位置, 为1代表异或在一起的两个数不相同。//while (m < 32){if (ret & (1 << m)){break;}else{m++;}}int x = 0;//记录单独出现的数int y = 0;//记录单独出现的数for (i = 0; i < numsSize; i++){if (nums[i] & (1 << m)) //&为1的为一组 直接全部异或到一起记录其值{x ^= nums[i];}else  //为0的为一组{y ^= nums[i];}}int* retArr = malloc(2 * sizeof(int));retArr[0] = x;retArr[1] = y;*returnSize = 2;return retArr;
}int main()
{int p = 0;int arr[] = { 1,2,55,55,66,66 };int* a = singleNumbers(arr, sizeof(arr) / sizeof(int), &p);printf("%d ", a[0]);printf("%d ", a[1]);free(a);a = NULL;printf("%d ", p);return 0;
}

相关文章:

一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字

这里写目录标题 问题详情分析问题代码展示 问题详情 剑指 Offer 56&#xff1a; 一个整型数组 nums 里除两个数字之外&#xff0c;其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n)&#xff0c;空间复杂度是O(1)。 示例&#xff1a; 输入&a…...

Vue基本学习2

Vue使用方法 <script src"js/vue.js"></script><script>/*** Mode1:数据模型&#xff0c;负责数据存储(后台业务逻辑/数据库)* View:视图层&#xff0c;负责页面展示(HTML)* View Model(Vue):负责业务逻辑处理(比如Ajax请求等)* view 与 Model 数…...

创作者等级权益说明

创作者等级权益说明 一、如何查看创作者等级权益二、等级权益对照表 一、如何查看创作者等级权益 step1&#xff1a;鼠标移动至头像&#xff0c;显示如下图的浮窗 step2&#xff1a;点击我的等级&#xff0c;即跳转到创作者等级权益页面 图1.1 我的等级 图1.2 创作者等级权益…...

基于SpringBoot+Vue+uniapp微信小程序的校园反诈骗微信小程序的详细设计和实现(源码+lw+部署文档+讲解等)

项目运行截图 技术框架 后端采用SpringBoot框架 Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的开源框架。它采用约定大于配置的理念&#xff0c;提供了一套默认的配置&#xff0c;让开发者可以更专注于业务逻辑而不是配置文件。Spring Boot 通过自动化配置和约…...

统一修改UI库样式的几种方式

统一修改element组件库样式的几种方式。主题 | Element Plus 通过css变量设置 【CSS扩展】VUE如何使用或修改element plus中自带的CSS全局变量来定义样式:root {--hc-text-color-placeholder: #5f84a2;--hc-text-color-regular: #fff;--hc-text-color-primary: #fff;--hc-bg-c…...

ICM20948 DMP代码详解(88)

接前一篇文章:ICM20948 DMP代码详解(87) 本回继续对inv_convert_androidSensor_to_control函数进行解析。为了便于理解和回顾,再次贴出inv_convert_androidSensor_to_control函数源码,在EMD-Core\sources\Invn\Devices\Drivers\ICM20948\Icm20948DataBaseControl.c中,如下…...

字节跳动实习生投毒自家大模型细节曝光 影响到底有多大?

10月19日&#xff0c;字节跳动大模型训练遭实习生攻击一事引发广泛关注。据多位知情人士透露&#xff0c;字节跳动某技术团队在今年6月遭遇了一起内部技术袭击事件&#xff0c;一名实习生因对团队资源分配不满&#xff0c;使用攻击代码破坏了团队的模型训练任务。 据悉&#xf…...

【路径规划】蚁群算法优化bp神经网络回归预测

摘要 本文提出了一种基于蚁群算法&#xff08;ACO&#xff09;优化 BP 神经网络的回归预测方法&#xff0c;用于路径规划中的预测问题。通过蚁群算法优化神经网络的初始权值和阈值&#xff0c;提高了神经网络的训练效率和预测精度。实验结果表明&#xff0c;该方法能够有效提升…...

如何在OceanBase中新增系统变量及应用实践

因为系统变量涉及复杂的工程文件&#xff0c;为防止新增变量操作对软件系统的潜在影响&#xff0c;OceanBase为多数开发者设计了一套高效的编程框架。此框架允许开发者在新增及使用系统变量时&#xff0c;仅需专注于变量定义的细节。具体来说&#xff0c;通过运行一个Python脚本…...

Olap数据处理

一、OLAP 是什么 1. OLAP的定义 OLAP&#xff08;Online Analytical Processing&#xff0c;联机分析处理&#xff09;是一种软件技术&#xff0c;它主要专注于复杂的分析操作&#xff0c;帮助分析人员、管理人员或执行人员从多角度对信息进行快速、一致、交互地存取&#xf…...

Tailwind Starter Kit 一款极简的前端快速启动模板

Tailwind Starter Kit 是基于TailwindCSS实现的一款开源的、使用简单的极简模板扩展。会用Tailwincss就可以快速入手使用。Tailwind Starter Kit 是免费开源的。它不会在原始的TailwindCSS框架中更改或添加任何CSS。它具有多个HTML元素&#xff0c;并附带了ReactJS、Vue和Angul…...

物联网智能家居环境监测系统

作为物联网工程专业的学生&#xff0c;做一个智能家居非常重要&#xff0c;大家是这个专业的同学可以了解一下&#xff0c;不是这个专业的同学也可以了解一下&#xff0c;毕设可以参考哦。 稍微简单的了解&#xff08;仅对代码可以自己写的同学&#xff09; 对于一个零基础的物…...

观测云 AI 助手上线:智能运维,从此触手可及!

在当前的云原生时代&#xff0c;运维的复杂性和数据的爆炸式增长给企业带来了前所未有的挑战。为了帮助企业高效应对这些挑战&#xff0c;观测云自豪地推出了 AI 助手——智能化的运维助手&#xff0c;让每位用户都能轻松驾驭复杂的可观测性场景。 01 你身边的 PE 助手&#x…...

案例分析:拒绝服务攻击引发的网络调优之旅

在信息安全领域&#xff0c;拒绝服务攻击&#xff08;DoS&#xff09;与分布式拒绝服务攻击&#xff08;DDoS&#xff09;已成为企业面临的重要挑战之一。这些类型的攻击不仅能够导致服务中断&#xff0c;还可能对公司的声誉及财务状况产生不利影响。本文旨在通过一个案例来深入…...

Spring Boot Web框架:智慧社区设计新思路

4系统概要设计 4.1概述 本系统采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式&#xff0c;是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在任何时间、任何地点使用。系统工作原理图如图4-1所示&#xff1a; 图4-1系统工作原理…...

从 Hadoop 迁移到数据 Lakehouse 的架构师指南

从 Hadoop 到数据湖仓一体架构的演变代表了数据基础架构的重大飞跃。虽然 Hadoop 曾经以其强大的批处理能力统治着大数据领域&#xff0c;但如今的组织正在寻求更敏捷、更具成本效益和现代化的解决方案。尤其是当他们越来越多地开始实施 AI 计划时。根本没有办法让 Hadoop 为 A…...

Python基础——类与对象

类与对象的理解&#xff1a; 在程序中我们将类看作是设计图纸&#xff0c;对象则是根据这个图纸生产的产品。面向对象编程就是使用对象编程&#xff0c;在类中我们定义成员属性和方法。 来看下面这个例子&#xff0c;创建student类&#xff0c;定义对象并对属性赋值。 class S…...

知乎广告怎么做?知乎种树推广怎么收费?

作为国内领先的知识分享平台&#xff0c;知乎以其高质量的内容和精准的用户群体&#xff0c;成为了品牌营销的新蓝海。云衔科技正式推出知乎信息流广告和知广告开户及代运营服务&#xff0c;旨在为企业提供一站式的营销解决方案。 一、知乎广告怎么做&#xff1f; 1.明确广告…...

【设计模式】Python 设计模式之建造者模式(Builder Pattern)详解

Python 设计模式之建造者模式&#xff08;Builder Pattern&#xff09;详解 在软件开发中&#xff0c;创建复杂对象往往需要多个步骤&#xff0c;而这些步骤之间的顺序、配置可能有多种变化。为了解决这个问题&#xff0c;建造者模式&#xff08;Builder Pattern&#xff09;应…...

微软常用运行库合集 Microsoft Visual C++ Redistributable 2023.11.13

微软常用系统运行库 Microsoft Visual C Redistributable&#xff08;简称&#xff1a;MSVC&#xff0c;VB/VC&#xff0c;系统运行库&#xff09;是Windows操作系统应用程序的基础类型库组件。此版微软常用运行库合集整合Visual C 组件安装包运行库所有版本&#xff0c;提供图…...

Jetson Orin Nano 升级jetpack5.1.2刷机过程记录

一.刷机起因 orin nano 接了个IMX477的摄像头,用 命令行DISPLAY:0.0 nvgstcapture-1.0 显示的画面有撕裂,让卖家查问题,卖家测试没有撕裂,对比环境,orin nano出厂默认的是jetpack5.1.1,卖家用的jetpack5.1.2版本,为了解决差异,要升级jetpack版本,前后搞了2天半,记录一下. 另外…...

Unity安卓构建72小时实战指南:从零到真机运行

1. 这不是“又一本Unity教程”&#xff0c;而是我带三个新人从零上线第一款安卓游戏的真实路径你点开这个标题&#xff0c;大概率正站在两个路口之间&#xff1a;一边是满屏“30天速成Unity”“零基础做爆款”的短视频封面&#xff0c;一边是你刚下载完Unity Hub、卡在Android …...

Kerberos身份认证原理与企业级排错实战指南

1. 这不是“另一个登录框”&#xff0c;而是一套精密运转的身份验证齿轮系统很多人第一次听说 Kerberos&#xff0c;是在公司内网登录邮箱或访问内部系统时&#xff0c;看到那个带小盾牌图标的弹窗——“正在使用 Kerberos 协议进行身份验证”。于是下意识觉得&#xff1a;“哦…...

2026年HR招聘偏好白皮书:这5项附加技能出现频率暴涨

2026 年的招聘市场&#xff0c;正在从“看你会什么岗位技能”&#xff0c;转向“看你能不能把岗位做得更智能”。HR筛简历时&#xff0c;越来越关注候选人的AI应用能力、数据化思维和业务落地能力。人社部近年发布的新职业中&#xff0c;已经出现生成式人工智能系统应用员、人工…...

ARM PMU外部接口与性能监控寄存器详解

1. ARM性能监控寄存器外部接口深度解析性能监控单元(PMU)是现代处理器架构中用于硬件性能分析的核心模块&#xff0c;它通过一组可编程计数器实时捕获处理器微架构层面的各类事件。在ARMv8/v9架构中&#xff0c;PMU不仅可以通过系统寄存器访问&#xff0c;还提供了标准化的外部…...

基于MAX78000的医疗紧急呼叫系统:边缘AI与低功耗设计实战

1. 项目概述与核心价值大家好&#xff0c;我是Victor Hugo&#xff0c;一名电子工程师。今天我想和大家分享一个我最近完成并参与设计竞赛的项目&#xff1a;一个基于MAX78000 FTHR开发板的医疗紧急呼叫辅助系统。这个项目的核心&#xff0c;不是从零开始造一个新轮子&#xff…...

16个分片+2副本:pg_shard的master_create_worker_shards最佳实践

16个分片2副本&#xff1a;pg_shard的master_create_worker_shards最佳实践 【免费下载链接】pg_shard ATTENTION: pg_shard is superseded by Citus, its more powerful replacement 项目地址: https://gitcode.com/gh_mirrors/pg/pg_shard pg_shard作为PostgreSQL的分…...

Claude端到端测试设计终极清单:覆盖17类非功能需求(含延迟敏感度分级、幻觉熔断阈值、多轮对话状态持久化验证)

更多请点击&#xff1a; https://kaifayun.com 第一章&#xff1a;Claude端到端测试设计的演进逻辑与核心范式 Claude端到端测试并非静态产物&#xff0c;而是随模型能力边界拓展、交互场景复杂化及可靠性要求升级而持续演化的工程实践。其演进逻辑根植于三个关键张力&#xf…...

3大突破性功能:用HiveWE革新你的魔兽争霸III地图创作体验

3大突破性功能&#xff1a;用HiveWE革新你的魔兽争霸III地图创作体验 【免费下载链接】HiveWE A Warcraft III world editor. 项目地址: https://gitcode.com/gh_mirrors/hi/HiveWE 还在为传统魔兽争霸III编辑器缓慢的加载速度和复杂的操作界面而烦恼吗&#xff1f;Hive…...

HKMG工艺的“阿喀琉斯之踵”:聊聊那个无法移除的SiON界面层与未来0.3nm的挑战

HKMG工艺的隐形枷锁&#xff1a;SiON界面层的物理宿命与亚纳米级突围战 在半导体工艺演进的史诗中&#xff0c;HKMG&#xff08;高K金属栅&#xff09;技术曾被寄予厚望——它用金属栅极替代传统多晶硅&#xff0c;搭配高K介质材料HfO₂&#xff0c;一举解决了栅极耗尽和漏电流…...