问题描述
小A是某科技公司的数据分析师,他每天需要处理大量的数据表。今天,系统生成了n张数据表,每张表都有一个唯一的整数编号。但由于系统故障,除了一个编号只出现一次外,其余每个编号都恰好出现了两次。而那个只出现一次的独特编号对应的数据表可能无法顺利产出。小A需要快速找出这个独特的编号,以便及时修复问题,确保数据表能顺利产出。
要求:
- 设计一个算法,在O(n)的时间复杂度内找出独特的编号,其中n是数据表的数量。
- 尽量减少额外空间的使用,以体现算法的优化能力。
测试样例
样例1:
输入:
tables = [101, 101, 202, 202, 303, 303, 404, 505, 505]输出:404解释:编号101、202、303、505都出现了两次,只有编号404出现一次,因此404是独特的编号。
样例2:
输入:
tables = [0, 1, 0, 1, 2]输出:2解释:编号0和1都出现了两次,只有编号2出现一次,因此2是独特的编号。
样例3:
输入:
tables = [7, 3, 3, 7, 10]输出:10解释:编号3和7都出现了两次,只有编号10出现一次,因此10是独特的编号。
约束条件
- 1 ≤ tables.length ≤ 1001
- 0 ≤ tablesi ≤ 1000
- 数据表数量为奇数
- 除了一个编号只出现一次外,其余每个编号都恰好出现两次
程序代码
#include <stdio.h>
int findUnique(int* tables, int tablesSize) {
int result = 0;
for (int i = 0; i < tablesSize; i++) {
result ^= tablesi;
}
return result;
}
int main() {
int tables1\[\] = {101, 101, 202, 202, 303, 303, 404, 505, 505};
int tables2\[\] = {0, 1, 0, 1, 2};
int tables3\[\] = {7, 3, 3, 7, 10};
printf("%d\n", findUnique(tables1, 9)); // 404
printf("%d\n", findUnique(tables2, 5)); // 2
printf("%d\n", findUnique(tables3, 5)); // 10
return 0;
}
cpp
#include <stdio.h>
int findUnique(int* tables, int tablesSize) {
int result = 0;
for (int i = 0; i < tablesSize; i++) {
result ^= tables[i];
}
return result;
}
int main() {
int tables1[] = {101, 101, 202, 202, 303, 303, 404, 505, 505};
int tables2[] = {0, 1, 0, 1, 2};
int tables3[] = {7, 3, 3, 7, 10};
printf("%d\n", findUnique(tables1, 9)); // 404
printf("%d\n", findUnique(tables2, 5)); // 2
printf("%d\n", findUnique(tables3, 5)); // 10
return 0;
}
运行结果
