问题描述
在时尚圈的一个聚会上,每位嘉宾都穿着一种特定颜色的衣服,用整数表示颜色编号。有趣的是,除了一个颜色之外,所有的颜色都恰好被两位嘉宾穿着(形成了配对)。现在需要你帮助时尚达人小F快速找到那个穿着独特颜色衣服的嘉宾的颜色编号是什么。
要求:
- 设计一个算法,使其时间复杂度为 O(n),其中 n 是嘉宾的人数。
- 尽量减少额外空间的使用,以体现你的算法优化能力。
测试样例
样例1:
输入:
colors = [1, 1, 2, 2, 3, 3, 4, 5, 5]输出:4解释:穿着颜色 4 的嘉宾是唯一一个没有配对的。
样例2:
输入:
colors = [0, 1, 0, 1, 2]输出:2解释:颜色 2 只被一位嘉宾穿着,是独特的颜色。
样例3:
输入:
colors = [7, 3, 3, 7, 10]输出:10解释:10 是聚会中唯一一个不重复的颜色编号。
约束条件
- 1 ≤ colors.length ≤ 1001
- 0 ≤ colorsi ≤ 1000
- 嘉宾人数为奇数
- 除了一个颜色只出现一次外,其余每个颜色都恰好出现两次
程序代码
#include <stdio.h>
int findUnique(int* colors, int colorsSize) {
int result = 0;
for (int i = 0; i < colorsSize; i++) {
result ^= colorsi;
}
return result;
}
int main() {
int colors1\[\] = {1, 1, 2, 2, 3, 3, 4, 5, 5};
int colors2\[\] = {0, 1, 0, 1, 2};
int colors3\[\] = {7, 3, 3, 7, 10};
int size1 = sizeof(colors1) / sizeof(colors10);
int size2 = sizeof(colors2) / sizeof(colors20);
int size3 = sizeof(colors3) / sizeof(colors30);
printf("%d\n", findUnique(colors1, size1)); // 4
printf("%d\n", findUnique(colors2, size2)); // 2
printf("%d\n", findUnique(colors3, size3)); // 10
return 0;
}
cpp
#include <stdio.h>
int findUnique(int* colors, int colorsSize) {
int result = 0;
for (int i = 0; i < colorsSize; i++) {
result ^= colors[i];
}
return result;
}
int main() {
int colors1[] = {1, 1, 2, 2, 3, 3, 4, 5, 5};
int colors2[] = {0, 1, 0, 1, 2};
int colors3[] = {7, 3, 3, 7, 10};
int size1 = sizeof(colors1) / sizeof(colors1[0]);
int size2 = sizeof(colors2) / sizeof(colors2[0]);
int size3 = sizeof(colors3) / sizeof(colors3[0]);
printf("%d\n", findUnique(colors1, size1)); // 4
printf("%d\n", findUnique(colors2, size2)); // 2
printf("%d\n", findUnique(colors3, size3)); // 10
return 0;
}
运行结果
