问题描述
在一次数学游戏活动中,老师给全班同学分发了数字卡片,每张卡片上有一个整数。游戏规则是:所有数字都会成对出现,但有一位同学不小心拿错了卡片,导致他的数字与众不同。班长小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;
}
运行结果
