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;
}

运行结果

相关推荐
BK贝壳28 分钟前
亿级用户签到位图选型复盘:用 bool-hybrid-array 扛冷启动打卡,也把它和 Roaring/Redis 的边界测清楚了
数据结构·python·性能优化·numpy
挖井观天10 小时前
《Java数据结构》第一讲:顺序表
数据结构
lhbweilai10 小时前
分析FreeRTOS内核对象API的源码实现(八)
c语言·开发语言·stm32·单片机
艾络迅Acceleronix11 小时前
环境监测终端:STM32+EG800Z AT+ 艾络迅平台实战|多传感器采集联动全流程
c语言·stm32·单片机·嵌入式硬件·物联网·1024程序员节
炘爚11 小时前
数据结构算法总结
数据结构·python·算法
Zwawa11 小时前
一只按键不只“按下”:短按、长按和连按如何共存
c语言·单片机·嵌入式
见叶之秋12 小时前
【C++】红与黑的边界:红黑树从插入到自检
数据结构·c++·算法·面试
kiracrimson13 小时前
string 容器:从 C 字符串到会自己扩容的类
开发语言·数据结构·c++·stl
wyhwust14 小时前
程序设计基础--C语言输入输出单元测试
c语言·开发语言
CQU_JIAKE14 小时前
10.25【A】
数据结构·算法