C语言/数据结构位运算题解:异或XOR找出蛋糕订单中的“VIP独特口味“——只出现一次的数字

问题描述

小明是蛋糕工厂的生产主管,工厂每天需要根据订单生产不同口味的蛋糕。订单列表中的每种口味(用整数表示)都恰好出现两次,但有一种特殊口味的蛋糕订单只出现一次(这是VIP客户的定制订单)。小明需要快速找出这个只出现一次的独特口味,以便优先安排生产。

要求:

  1. 设计一个算法,在O(n)的时间复杂度内找出只出现一次的蛋糕口味编号。
  2. 尽量减少额外空间的使用,优化资源分配效率。

测试样例

样例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;
}

运行结果

相关推荐
h_a_o777oah13 小时前
【树论】树链剖分:将树形结构转化为线性结构以处理树上路径问题(洛谷 P3384 附C++代码模板)
数据结构·算法·线段树·acm·树链剖分·树论·重链剖分
HEJOO913 小时前
指针的算术运算详解
java·数据结构·算法
Coder-magician13 小时前
《代码随想录》刷题打卡day47:并查集-part01
数据结构·算法·图论
垆边人似月.14 小时前
VLAN 资源池(100~200 分档)
数据结构·算法
程序员清风15 小时前
算法与数据结构入门:复杂度、数组与链表
数据结构·算法·链表
山下梅子酒22515 小时前
洛谷-入门-B2079
c语言
Mr_Macallon17 小时前
C++回顾(基础)(01)
c语言·开发语言·c++·学习
wuminyu18 小时前
LockStack在虚拟线程Mount和Unmount拷贝过程剖析
java·linux·c语言·jvm·c++
Felven18 小时前
B. Reverse a Permutation
c语言
Logic10118 小时前
C语言/数据结构排序题解:三个数的最大乘积——排序后比较两种候选情况
c语言·数据结构·数组·排序·时间复杂度·算法题·负数处理