问题描述
小明是一家汽车制造厂的工程师,工厂有多条流水线,每条流水线上有多个零件需要装配。每个零件都有一个唯一的编号,但由于生产批次不同,有些零件编号会出现两次(表示同一批次的正品和备件),只有一个零件编号是独特的(表示特殊测试件)。小明需要快速找出这个独特编号的零件,以便进行质量检测。
要求:
- 设计一个算法,在 O(n) 时间复杂度内找出独特编号的零件,其中 n 是流水线上零件的总数。
- 尽量减少额外空间的使用,以优化流水线检测效率。
测试样例
样例1:
输入:
parts = [101, 102, 101, 103, 102, 104, 103]输出:104解释:编号 101、102、103 都出现了两次,只有 104 出现一次,因此是独特零件。
样例2:
输入:
parts = [5, 9, 5, 9, 3]输出:3解释:编号 5 和 9 都出现了两次,只有 3 出现一次,因此是独特零件。
样例3:
输入:
parts = [200, 200, 300, 400, 300, 400, 500]输出:500解释:编号 200、300、400 都出现了两次,只有 500 出现一次,因此是独特零件。
约束条件
- 1 ≤ parts.length ≤ 1001
- 0 ≤ partsi ≤ 1000
- 流水线上零件总数为奇数
- 除了一个零件编号只出现一次外,其余每个零件编号(如果存在)都恰好出现两次
程序代码
#include <stdio.h>
int findUnique(int* parts, int partsSize) {
int result = 0;
for (int i = 0; i < partsSize; i++) {
result ^= partsi;
}
return result;
}
int main() {
int parts1\[\] = {101, 102, 101, 103, 102, 104, 103};
int parts2\[\] = {5, 9, 5, 9, 3};
int parts3\[\] = {200, 200, 300, 400, 300, 400, 500};
printf("%d\n", findUnique(parts1, 7)); // 104
printf("%d\n", findUnique(parts2, 5)); // 3
printf("%d\n", findUnique(parts3, 7)); // 500
return 0;
}
cpp
#include <stdio.h>
int findUnique(int* parts, int partsSize) {
int result = 0;
for (int i = 0; i < partsSize; i++) {
result ^= parts[i];
}
return result;
}
int main() {
int parts1[] = {101, 102, 101, 103, 102, 104, 103};
int parts2[] = {5, 9, 5, 9, 3};
int parts3[] = {200, 200, 300, 400, 300, 400, 500};
printf("%d\n", findUnique(parts1, 7)); // 104
printf("%d\n", findUnique(parts2, 5)); // 3
printf("%d\n", findUnique(parts3, 7)); // 500
return 0;
}
运行结果
