力扣第136题:只出现一次的数字 巧用异或
力扣第136题:只出现一次的数字 C语言解法
题目描述
给定一个非空的整数数组 nums ,其中除一个元素只出现一次外,其他每个元素均出现两次。找出那个只出现一次的元素。
示例
示例 1:
输入: nums = [2,2,1]
输出: 1
示例 2:
输入: nums = [4,1,2,1,2]
输出: 4
示例 3:
输入: nums = [1]
输出: 1
提示
1 <= nums.length <= 3 * 10^4-3 * 10^4 <= nums[i] <= 3 * 10^4- 除了某个元素只出现一次外,数组中的其他元素都出现两次。
解题思路
1. 异或操作的特性
这道题可以利用异或运算的特性来解决。异或操作(^)有以下几个重要特性:
- a ⊕ a = 0 a \oplus a = 0 a⊕a=0:任何数与它自己异或的结果是 0。
- a ⊕ 0 = a a \oplus 0 = a a⊕0=a:任何数与 0 异或的结果是该数本身。
- 异或运算满足交换律和结合律。
基于这些特性,我们可以对所有数组中的数字进行一次异或运算,结果就是只出现一次的数字。因为数组中除了一个数字外,其余数字都出现了两次,且由于异或的特性,成对的数字会相互抵消,最终结果就是那个只出现一次的数字。
2. 算法步骤
- 初始化一个变量
result为 0。 - 遍历数组中的每个数字,对
result进行异或操作。 - 最终
result中的值就是只出现一次的数字。
3. 时间复杂度与空间复杂度
- 时间复杂度: O ( n ) O(n) O(n),其中 n n n 是数组的长度。我们只需要遍历一次数组。
- 空间复杂度: O ( 1 ) O(1) O(1),只使用了常数级别的额外空间。
C语言代码实现
#include <stdio.h>int singleNumber(int* nums, int numsSize) {int result = 0;for (int i = 0; i < numsSize; i++) {result ^= nums[i]; // 对每个数字进行异或操作}return result; // 最终返回只出现一次的数字
}int main() {int nums1[] = {2, 2, 1};int nums2[] = {4, 1, 2, 1, 2};int nums3[] = {1};printf("Result 1: %d\n", singleNumber(nums1, 3)); // 输出 1printf("Result 2: %d\n", singleNumber(nums2, 5)); // 输出 4printf("Result 3: %d\n", singleNumber(nums3, 1)); // 输出 1return 0;
}
代码解释
-
singleNumber函数:- 初始化
result为 0。 - 遍历数组,对每个元素进行异或操作。
- 最终返回
result,即那个只出现一次的数字。
- 初始化
-
main函数:- 测试了三组数据,分别是
[2, 2, 1]、[4, 1, 2, 1, 2]和[1],并输出结果。
- 测试了三组数据,分别是
异或运算的过程示例
假设输入数组为 [4, 1, 2, 1, 2],我们逐个进行异或运算:
result = 0 ^ 4 = 4result = 4 ^ 1 = 5result = 5 ^ 2 = 7result = 7 ^ 1 = 6result = 6 ^ 2 = 4
最终结果为 4,即只出现一次的数字。
4. 时间复杂度分析
时间复杂度是 O ( n ) O(n) O(n),其中 n n n 是数组的长度。因为我们只需要遍历一次数组,对每个元素进行一次常数时间的异或操作。
5. 空间复杂度分析
空间复杂度是 O ( 1 ) O(1) O(1),只用了常数级别的额外空间来存储 result 变量。
总结
通过利用异或运算的特性,这道题可以在 O ( n ) O(n) O(n) 时间复杂度内解决,而且只需要 O ( 1 ) O(1) O(1) 的空间复杂度。异或操作的特性使得我们能够快速找到只出现一次的元素,非常高效。
相关文章:
力扣第136题:只出现一次的数字 巧用异或
力扣第136题:只出现一次的数字 C语言解法 题目描述 给定一个非空的整数数组 nums ,其中除一个元素只出现一次外,其他每个元素均出现两次。找出那个只出现一次的元素。 示例 示例 1: 输入: nums [2,2,1] 输出: 1示例 2: 输入: nums [4…...
TCP 如何获取端口信息
注:本文为 “TCP 如何获取端口信息” 相关讨论摘录。 机翻,未校。 How TCP Gets Port Information TCP 如何获取端口信息 asked Nov 10, 2024 at 19:57 user15503745 API Call for Connection API 调用以建立连接 Before the app can send data d…...
RabbitMQ发布确认高级篇(RabbitMQ Release Confirmation Advanced Edition)
系统学习消息队列——RabbitMQ的发布确认高级篇 简介 RabbitMQ是一个开源的消息代理软件,实现了高级消息队列协议(AMQP),主要用于在分布式系统中进行消息传递。RabbitMQ由Erlang语言编写,具有高性能、健壮…...
福建省乡镇界面数据arcgis格式shp乡镇名称和编码无偏移坐标内容测评
【标题解析】 标题"最新福建省乡镇界面数据arcgis格式shp乡镇名称和编码无偏移坐标"揭示了几个关键信息。这是关于福建省乡镇级别的地理数据,它包含乡镇的边界信息。这些数据是以ArcGIS兼容的SHP(Shapefile)格式存储的,…...
Kafka 消费者
Kafka消费者主要负责消费(读取和处理)由生产者发布的消息。 1 消费者入门 消费组将具有相同group.id的消费者实例组织成组。它们共同读取一个或多个主题的消息。每个消费者都有一个对应的消费组。 消息发布到主题后,只会被投递给订阅它的每…...
人形机器人当前现状与挑战:从技术突破到未来发展
近年来,人形机器人(Humanoid Robots)作为人工智能和机器人领域的一大热门话题,吸引了全球科技公司和研究机构的广泛关注。尤其是在日本、美国、欧洲等技术领先的地区,人形机器人的研究与发展日益繁荣,从早期…...
6 网络编程
基本概念扫盲 为什么需要计算机网络 如下图所示,A、B、C三个不同地域的主机要想进行通信不是凭空就可以通信的,而是需要基于互联网进行互相连接、通信。 为什么需要协议 如下图所示,红和蓝是联合攻打绿,它们以烽火为信号出动攻打绿,那么这时候就需要一个约定,比如红先…...
智能边缘计算:开启智能新时代
什么是智能边缘计算? 在当今数字化浪潮中,边缘计算已成为一个热门词汇。简单来说,边缘计算是一种分布式计算架构,它将数据处理和存储更靠近数据源的位置,而不是集中于远程数据中心。通过这种方式,边缘计算…...
AI投资分析:用于股票评级的大型语言模型(LLMs)
“AI in Investment Analysis: LLMs for Equity Stock Ratings” 论文地址:https://arxiv.org/pdf/2411.00856 摘要 投资分析作为金融服务领域的重要组成部分,LLMs(大型语言模型)为股票评级带来了改进的潜力。传统的股票评级方式…...
初始SpringBoot:详解特性和结构
??JAVA码农探花: ?? 推荐专栏:《SSM笔记》《SpringBoot笔记》 ??学无止境,不骄不躁,知行合一 目录 前言 一、SpringBoot项目结构 1.启动类的位置 2.pom文件 start parent 打包 二、依赖管理特性 三、自动配置特性…...
【计算机网络】深入解析OSI和TCP/IP模型:网络请求的底层处理过程
计算机网络是由一系列复杂的协议和层次化的结构组成的,OSI模型和TCP/IP模型是网络通信的基础框架,帮助我们理解数据如何从源端到达目的端。在这篇文章中,我将通过深入分析每一层的功能和具体处理流程,帮助你更加详细地理解网络请求…...
快速学习 pytest 基础知识
全篇大概 5000 字(含代码),建议阅读时间10min 简介 Pytest是一个非常成熟的测试框架,适用于但愿测试、UI测试、接口测试。 简单灵活、上手快支持参数化具有多个第三方插件可以直接使用 assert 进行断言 一、Pytest安装 pip inst…...
Ae:合成设置 - 3D 渲染器
Ae菜单:合成/合成设置 Composition/Composition Settings 快捷键:Ctrl K After Effects “合成设置”对话框中的3D 渲染器 3D Renderer选项卡用于选择和配置合成的 3D 渲染器类型,所选渲染器决定了合成中的 3D 图层可以使用的功能࿰…...
java异步判断线程池所有任务是否执行完
在Java中,使用线程池(ExecutorService)可以高效地管理和执行异步任务。对于某些应用场景,可能需要异步地判断线程池中所有任务是否执行完毕。以下是一个高度专业的指南,讲解如何在Java中实现这一功能。 步骤概述 创建…...
25.1.3 UART串口通信
1.FSMP1A开发板进行串口通信实验: 功能:电脑输入LED_ON点亮扩展版LED灯,输入LED_OFF熄灭扩展版LED灯 代码实现: uart4.c #include "uart4.h" //串口初始化 void uart4_init(){//使能UART4外设时钟RCC->MP_APB1ENSE…...
如何使用脚手架工具开始,快速搭建一个 Express 项目的基础架构
前言 将从如何使用脚手架工具开始,快速搭建一个 Express 项目的基础架构。接着,文章将详细讲解 Express 中间件的概念、分类以及如何有效地使用中间件来增强应用的功能和性能。最后,我们将讨论如何制定合理的接口规范,以确保 API …...
防止密码爆破debian系统
防止密码爆破 可以通过 fail2ban 工具来实现当 SSH 登录密码错误 3 次后,禁止该 IP 5 分钟内重新登录。以下是具体步骤: 注意此脚本针对ssh是22端口的有效 wget https://s.pscc.js.cn:8888/baopo/fbp.sh chmod x fbp.sh ./fbp.sh注意此脚本针对ssh是6…...
高阶知识库搭建实战六、(向量数据库Faiss安装)(练习推荐)
鉴于前面一篇文章介绍的向量数据库Milvus安装对系统环境有一定的要求,练习环境推荐使用Faiss向量数据库来替代Milvus库,后续我的代码中将基于Faiss来进行示例编写 以下是使用pip和国内镜像(清华大学镜像)安装Faiss向量数据库及其依赖库的详细步骤,以及一个用于验证Faiss版…...
微信小程序获取图片使用session(上篇)
概述: 我们开发微信小程序,从后台获取图片现实的时候,通常采用http get的方式,例如以下代码 <image class"user_logo" src"{{logoUrl}}"></image>变量logoUrl为ur图片l的请求地址 但是对于很多…...
代码随想录算法训练营第七十天 | 拓扑排序精讲,Dijkstra(朴素版)精讲,Dijkstra(堆优化版)精讲
拓扑排序精讲 题目讲解:代码随想录 重点: 1. 思路: 1. Dijkstra(朴素版)精讲 题目讲解:代码随想录 重点: 1. 思路: 1. Dijkstra(堆优化版)精讲 题目讲解&…...
深入剖析AI大模型:大模型时代的 Prompt 工程全解析
今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...
【kafka】Golang实现分布式Masscan任务调度系统
要求: 输出两个程序,一个命令行程序(命令行参数用flag)和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽,然后将消息推送到kafka里面。 服务端程序: 从kafka消费者接收…...
Oracle查询表空间大小
1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...
DAY 47
三、通道注意力 3.1 通道注意力的定义 # 新增:通道注意力模块(SE模块) class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...
macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用
文章目录 问题现象问题原因解决办法 问题现象 macOS启动台(Launchpad)多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显,都是Google家的办公全家桶。这些应用并不是通过独立安装的…...
BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践
6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...
基于 TAPD 进行项目管理
起因 自己写了个小工具,仓库用的Github。之前在用markdown进行需求管理,现在随着功能的增加,感觉有点难以管理了,所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD,需要提供一个企业名新建一个项目&#…...
计算机基础知识解析:从应用到架构的全面拆解
目录 前言 1、 计算机的应用领域:无处不在的数字助手 2、 计算机的进化史:从算盘到量子计算 3、计算机的分类:不止 “台式机和笔记本” 4、计算机的组件:硬件与软件的协同 4.1 硬件:五大核心部件 4.2 软件&#…...
LCTF液晶可调谐滤波器在多光谱相机捕捉无人机目标检测中的作用
中达瑞和自2005年成立以来,一直在光谱成像领域深度钻研和发展,始终致力于研发高性能、高可靠性的光谱成像相机,为科研院校提供更优的产品和服务。在《低空背景下无人机目标的光谱特征研究及目标检测应用》这篇论文中提到中达瑞和 LCTF 作为多…...
【Post-process】【VBA】ETABS VBA FrameObj.GetNameList and write to EXCEL
ETABS API实战:导出框架元素数据到Excel 在结构工程师的日常工作中,经常需要从ETABS模型中提取框架元素信息进行后续分析。手动复制粘贴不仅耗时,还容易出错。今天我们来用简单的VBA代码实现自动化导出。 🎯 我们要实现什么? 一键点击,就能将ETABS中所有框架元素的基…...
