问题描述
小明是蛋糕工厂的生产主管,工厂每天需要根据订单生产不同口味的蛋糕。订单列表中的每种口味(用整数表示)都恰好出现两次,但有一种特殊口味的蛋糕订单只出现一次(这是VIP客户的定制订单)。小明需要快速找出这个只出现一次的独特口味,以便优先安排生产。
要求:
- 设计一个算法,在O(n)的时间复杂度内找出只出现一次的蛋糕口味编号。
- 尽量减少额外空间的使用,优化资源分配效率。
测试样例
样例1:
输入:
orders = [1, 1, 2, 2, 3, 3, 4, 5, 5]输出:4解释:口味1出现2次,2出现2次,3出现2次,4出现1次,5出现2次。因此独特口味是4。
样例2:
输入:
orders = [0, 1, 0, 1, 2]输出:2解释:口味0出现2次,1出现2次,2出现1次。因此独特口味是2。
样例3:
输入:
orders = [7, 3, 3, 7, 10]输出:10解释:口味7出现2次,3出现2次,10出现1次。因此独特口味是10。
约束条件
- 1 ≤ orders.length ≤ 1001
- 0 ≤ ordersi ≤ 1000
- 订单数量为奇数(因为除了一种口味出现一次外,其余每种口味都恰好出现两次)
- 输入保证只有一种口味出现一次,其余每种口味都恰好出现两次
程序代码
#include <stdio.h>
int findUnique(int* orders, int ordersSize) {
int result = 0;
for (int i = 0; i < ordersSize; i++) {
result ^= ordersi;
}
return result;
}
int main() {
int orders1\[\] = {1, 1, 2, 2, 3, 3, 4, 5, 5};
int orders2\[\] = {0, 1, 0, 1, 2};
int orders3\[\] = {7, 3, 3, 7, 10};
printf("%d\n", findUnique(orders1, 9)); // 4
printf("%d\n", findUnique(orders2, 5)); // 2
printf("%d\n", findUnique(orders3, 5)); // 10
return 0;
}
cpp
#include <stdio.h>
int findUnique(int* orders, int ordersSize) {
int result = 0;
for (int i = 0; i < ordersSize; i++) {
result ^= orders[i];
}
return result;
}
int main() {
int orders1[] = {1, 1, 2, 2, 3, 3, 4, 5, 5};
int orders2[] = {0, 1, 0, 1, 2};
int orders3[] = {7, 3, 3, 7, 10};
printf("%d\n", findUnique(orders1, 9)); // 4
printf("%d\n", findUnique(orders2, 5)); // 2
printf("%d\n", findUnique(orders3, 5)); // 10
return 0;
}
运行结果
