C语言/数据结构位运算题解:异或XOR找出流水线上的“独特零件编号“——只出现一次的数字

问题描述

小明是一家汽车制造厂的工程师,工厂有多条流水线,每条流水线上有多个零件需要装配。每个零件都有一个唯一的编号,但由于生产批次不同,有些零件编号会出现两次(表示同一批次的正品和备件),只有一个零件编号是独特的(表示特殊测试件)。小明需要快速找出这个独特编号的零件,以便进行质量检测。

要求:

  1. 设计一个算法,在 O(n) 时间复杂度内找出独特编号的零件,其中 n 是流水线上零件的总数。
  2. 尽量减少额外空间的使用,以优化流水线检测效率。

测试样例

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

运行结果

相关推荐
学逆向的5 分钟前
C 指针常量与常量指针
c语言·开发语言·网络安全
水饺编程41 分钟前
第2章:Linux 基础,exit 命令
linux·c语言·汇编
shehuiyuelaiyuehao1 小时前
算法56,重排链表
数据结构·算法·链表
suhan3 小时前
【数据结构】七、查找:1.查找的概念、线性结构查找(顺序、折半(二分)、插值、稠密、分块、倒排)
数据结构·算法·排序算法
极客 - L U3 小时前
卡尔曼滤波从零到精通
c语言·数据结构·单片机·嵌入式硬件·mcu
谙弆悕博士5 小时前
用 C 写了个 Windows 聊天室,踩了几个多线程和控制台的坑
c语言·开发语言·c++·windows·网络编程·聊天室
水饺编程5 小时前
第2章:Linux 基础,删除用户
linux·c语言·汇编
Sarvartha6 小时前
栈的四则运算、栈的递归应用
数据结构·算法
小鱼仙官7 小时前
使用Qt封装C/C++ 动态库 用于第三方调用
c语言·c++·qt
GG.WinGel8 小时前
三元组中心问题
java·数据结构·算法·青少年编程·蓝桥杯