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

运行结果

相关推荐
wuminyu6 小时前
Virtual Thread重投递至ForkJoinPool任务队列过程解析
java·linux·c语言·jvm·c++
All for pursuit.6 小时前
【回溯-6】79.单词搜索
数据结构·c++·算法·leetcode
Navigator_Z6 小时前
LeetCode //C - 1281. Subtract the Product and Sum of Digits of an Integer
c语言·算法·leetcode
iCxhust6 小时前
51单片机电力载波应用开发(七)广播通讯
c语言·开发语言·单片机·嵌入式硬件·51单片机
Benny_Tang7 小时前
AT_arc180_d [ARC180D] Division into 3 题解
数据结构·c++·算法
殷色玫瑰7 小时前
C++ STL:stack、queue、priority_queue 与容器适配器详解
java·开发语言·数据结构·c++·算法·visualstudio
Hi202402177 小时前
同一个 NMS 算子,两种语言实现:CUDA C 与 Rust 生成 LLVM IR 和 Vortex 汇编的差异
c语言·汇编·rust·gpgpu·vortex·cudac
lhbweilai8 小时前
深挖FreeRTOS内核实现(二)
c语言·汇编·stm32·单片机
杨丰玮4188 小时前
C语言核心语法
java·c语言·开发语言·学习方法
Zwawa8 小时前
反馈:让系统知道自己做得对不对
c语言·单片机·嵌入式