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

C语言/数据结构算法题:异或运算找出唯一出现一次的数字(O(n)时间+O(1)空间)

问题描述

在一个班级中,每位同学都拿到了一张卡片,上面有一个整数。有趣的是,除了一个数字之外,所有的数字都恰好出现了两次。现在需要你帮助班长小C快速找到那个拿了独特数字卡片的同学手上的数字是什么。

要求:

  1. 设计一个算法,使其时间复杂度为 O(n),其中 n 是班级的人数。
  2. 尽量减少额外空间的使用,以体现你的算法优化能力。

约束条件

  • 1 ≤ cards.length ≤ 1001
  • 0 ≤ cards[i] ≤ 1000
  • 班级人数为奇数
  • 除了一个数字卡片只出现一次外,其余每个数字卡片都恰好出现两次

代码如下:

#include <stdio.h>

int findUnique(int* cards, int cardsSize) {

int result = 0;

for (int i = 0; i < cardsSize; i++) {

result ^= cards[i];// 异或操作:相同为0,不同为1

}

return result;

}

int main() {

int cards1[] = {1, 1, 2, 2, 3, 3, 4, 5, 5};

int cards2[] = {0, 1, 0, 1, 2};

int cards3[] = {7, 3, 3, 7, 10};

printf("%d\n", findUnique(cards1, 9));

printf("%d\n", findUnique(cards2, 5));

printf("%d\n", findUnique(cards3, 5));

return 0;

}

运行结果

解题思路

核心思想:异或运算(XOR)

异或运算的性质:

  1. 交换律a ^ b = b ^ a

  2. 结合律(a ^ b) ^ c = a ^ (b ^ c)

  3. 自反性a ^ a = 0

  4. 恒等性a ^ 0 = a


执行过程

对于数组{1, 1, 2, 2, 3, 3, 4, 5, 5}

步骤当前值result异或运算
初始0
1110 ^ 1 = 1
2101 ^ 1 = 0
3220 ^ 2 = 2
4202 ^ 2 = 0
5330 ^ 3 = 3
6303 ^ 3 = 0
7440 ^ 4 = 4
8514 ^ 5 = 1
9541 ^ 5 = 4

结果 = 4


复杂度分析

指标
时间复杂度O(n) — 只需遍历一次数组
空间复杂度O(1) — 只使用一个整数变量result

关键规律:异或就是“无进位加法

XOR(异或)在二进制中的本质是:

按位相加,但不进位

http://www.jsqmd.com/news/1195069/

相关文章:

  • MATLAB一维数组拼接实战:从基础合并到高级交叉合并
  • KiCanvas:零安装浏览器查看器解决方案——让KiCAD设计文件在线协作成为现实
  • 湍流模式实战指南 | 从涡粘性假设到雷诺应力模型的工程选择
  • 一文读懂LangChain/LangGraph
  • 从GeForce到Blackwell:解码英伟达GPU架构演进与产品定位
  • 2026年企业数字化软件服务商靠谱推荐:金蝶ERP、业财税一体化系统定制实施服务商选择指南 - 海棠依旧大
  • 别老想着搞个AI巨无霸,给你四块积木重装体验
  • Android面试深度解析:从基础概念到系统设计实战指南
  • 2026成都名包回收满分星级测评|连锁机构全域门店实测深度报告 - 奢侈品回收机构参考
  • 深入解析DLP9500UV紫外DMD:原理、设计与工业应用实战
  • GNSS数据产品一站式下载指南:从观测文件到精密产品的FTP/HTTPS资源全解析
  • withoutbg-python云端API深度解析:专业级背景移除效果与API调用最佳实践
  • 如何通过JavaScript面板技术深度优化foobar2000的用户体验:foobox-cn完整方案解析
  • SDC-时钟约束实战:从基础命令到多时钟域设计避坑指南
  • 【高项】从“章程”到“收尾”:项目整体、范围与进度管理的实战协同
  • 人生下半场最重要的修行:在风暴里,多留一秒的余地
  • 2026 年 7 月实地勘店上海劳力士授权维修服务中心地址查询完整指南,线下保养维修优先核对门店资质避免踩坑 - 劳力士服务维修中心
  • 宝玑中国官方售后服务中心|服务热线与详细地址权威信息公示(2026年7月更新) - 亨得利钟表维修中心
  • 2026聊城东昌府区选购指南碧水源净水器旗舰店测评 - 百航
  • BiSheng JDK构建工具:华为毕昇JDK自动化构建与测试完整指南
  • 移远EC20 4G模块长短信(级联)收发实战:AT命令详解与中文编码避坑指南
  • 3个秘诀让你告别图标烦恼:MahApps.Metro.IconPacks完全实战指南
  • BlenderMCP:如何用AI助手彻底改变你的3D建模工作流
  • 【小程序计算机毕业设计案例】 基于 SpringBoot + 微信小程序的膳食营养科普服务系统 基于 SpringBoot的个性化食谱定制小程序的设计与实现(程序+文档+讲解+定制)
  • C#与OpenGL三维GIS开发:SharpGL与OpenTK选型实战指南
  • KUKA机器人奇异点:从原理到现场调试的实战解析
  • 猫抓浏览器扩展:网页媒体资源嗅探与智能下载解决方案
  • Exiled Exchange 2终极指南:3大核心技巧让流放之路2交易变得如此简单
  • 阳泉会议活动拍摄公司推荐|视频直播服务哪家好(2026政企影像深度评测) - 政企影像扫地僧
  • Jido区块链集成:智能合约与去中心化代理的终极指南