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

运行结果

相关推荐
w_zero_one2 分钟前
链表(4)
java·数据结构·算法
吠品7 分钟前
GitHub 周榜拆解:决策小模型扎堆上位
c语言·开发语言·算法
小师兄吃牛肉1 小时前
C语言篇:内联函数
c语言·开发语言
白山编程大哥2 小时前
C语言篇:语法进阶
c语言·数据结构·算法
Logic1012 小时前
C语言/数据结构动态规划题解:爬楼梯(含坏台阶)——避开障碍物的路径计数
c语言·数据结构·动态规划·时间复杂度·空间复杂度·算法题·爬楼梯
山下梅子酒2253 小时前
洛谷-入门-B2081
c语言
wuminyu3 小时前
Virtual Thread重投递至ForkJoinPool任务队列过程解析
java·linux·c语言·jvm·c++
All for pursuit.3 小时前
【回溯-6】79.单词搜索
数据结构·c++·算法·leetcode
Navigator_Z4 小时前
LeetCode //C - 1281. Subtract the Product and Sum of Digits of an Integer
c语言·算法·leetcode
iCxhust4 小时前
51单片机电力载波应用开发(七)广播通讯
c语言·开发语言·单片机·嵌入式硬件·51单片机