C语言/数据结构位运算题解:异或XOR找出独特卡片数字——只出现一次的元素

问题描述

在一次数学游戏活动中,老师给全班同学分发了数字卡片,每张卡片上有一个整数。游戏规则是:所有数字都会成对出现,但有一位同学不小心拿错了卡片,导致他的数字与众不同。班长小C需要快速找出这个独特的数字,以便帮助老师重新分发卡片。

请你设计一个高效的算法,帮助小C在 O(n) 的时间复杂度内找到那个只出现一次的数字,同时尽量少使用额外的存储空间。

测试样例

样例1:

输入:nums = [2, 2, 1, 1, 3, 3, 4, 5, 5] 输出:4 解释:数字 4 只出现一次,是独特的卡片。

样例2:

输入:nums = [0, 1, 0, 1, 2] 输出:2 解释:数字 2 是唯一不重复的数字。

样例3:

输入:nums = [7, 3, 3, 7, 10] 输出:10 解释:10 是班级中唯一一个没有配对的数字。

约束条件

  • 1 ≤ nums.length ≤ 1001
  • 0 ≤ numsi ≤ 1000
  • 数组长度为奇数
  • 除了一个元素只出现一次外,其余每个元素均出现两次

程序代码

#include <stdio.h>

int findUnique(int* nums, int numsSize) {

int result = 0;

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

result ^= numsi;

}

return result;

}

int main() {

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

int numsSize = sizeof(nums) / sizeof(nums0);

printf("%d\n", findUnique(nums, numsSize)); // 4

return 0;

}

cpp 复制代码
#include <stdio.h>

int findUnique(int* nums, int numsSize) {
    int result = 0;
    for (int i = 0; i < numsSize; i++) {
        result ^= nums[i];
    }
    return result;
}

int main() {
    int nums[] = {2, 2, 1, 1, 3, 3, 4, 5, 5};
    int numsSize = sizeof(nums) / sizeof(nums[0]);
    printf("%d\n", findUnique(nums, numsSize));  // 4
    return 0;
}

运行结果

相关推荐
郝学胜-神的一滴1 小时前
C++20模板元编程 02:吃透模板基础核心四大核心知识点
开发语言·数据结构·c++·程序人生·软件工程·visual studio
代码王同学2 小时前
2026.9.15日C++类和对象学习收获笔记
c语言·c++
irislinAmelia2 小时前
Day11文章_多路视频流加权公平调度与令牌桶QoS
c语言·人工智能
我不会起名字3222 小时前
万字总结Golang入门项目
数据结构·经验分享·算法·golang·项目实战·复盘
不会就选b12 小时前
数据结构之排序
数据结构
我不会起名字32215 小时前
一天一道算法题(34):回溯法的经典例题(子集)
java·数据结构·python·算法·golang·深度优先·力扣
云泽80815 小时前
STM32 USART 详解(八):C I/O 串口重定向原理与实现
c语言·stm32·嵌入式硬件
ThornArmor16 小时前
重铸1996|肉体渲染:关节的裂缝:分段模型积木拼装与未成熟的 RSP 矩阵骨骼动画形变
c语言·汇编·c++·python·硬件架构·游戏机
T1mzhou16 小时前
ARM64 Linux 6.10 内核驱动(12):dd.c:probe/ remove、延迟 probe
linux·服务器·c语言·arm开发·arm