C语言/数据结构位运算题解:异或XOR找出数据表中的“独特编号“——只出现一次的数字

问题描述

小A是某科技公司的数据分析师,他每天需要处理大量的数据表。今天,系统生成了n张数据表,每张表都有一个唯一的整数编号。但由于系统故障,除了一个编号只出现一次外,其余每个编号都恰好出现了两次。而那个只出现一次的独特编号对应的数据表可能无法顺利产出。小A需要快速找出这个独特的编号,以便及时修复问题,确保数据表能顺利产出。

要求:

  1. 设计一个算法,在O(n)的时间复杂度内找出独特的编号,其中n是数据表的数量。
  2. 尽量减少额外空间的使用,以体现算法的优化能力。

测试样例

样例1:

输入:tables = [101, 101, 202, 202, 303, 303, 404, 505, 505] 输出:404 解释:编号101、202、303、505都出现了两次,只有编号404出现一次,因此404是独特的编号。

样例2:

输入:tables = [0, 1, 0, 1, 2] 输出:2 解释:编号0和1都出现了两次,只有编号2出现一次,因此2是独特的编号。

样例3:

输入:tables = [7, 3, 3, 7, 10] 输出:10 解释:编号3和7都出现了两次,只有编号10出现一次,因此10是独特的编号。

约束条件

  • 1 ≤ tables.length ≤ 1001
  • 0 ≤ tablesi ≤ 1000
  • 数据表数量为奇数
  • 除了一个编号只出现一次外,其余每个编号都恰好出现两次

程序代码

#include <stdio.h>

int findUnique(int* tables, int tablesSize) {

int result = 0;

for (int i = 0; i < tablesSize; i++) {

result ^= tablesi;

}

return result;

}

int main() {

int tables1\[\] = {101, 101, 202, 202, 303, 303, 404, 505, 505};

int tables2\[\] = {0, 1, 0, 1, 2};

int tables3\[\] = {7, 3, 3, 7, 10};

printf("%d\n", findUnique(tables1, 9)); // 404

printf("%d\n", findUnique(tables2, 5)); // 2

printf("%d\n", findUnique(tables3, 5)); // 10

return 0;

}

cpp 复制代码
#include <stdio.h>

int findUnique(int* tables, int tablesSize) {
    int result = 0;
    for (int i = 0; i < tablesSize; i++) {
        result ^= tables[i];
    }
    return result;
}

int main() {
    int tables1[] = {101, 101, 202, 202, 303, 303, 404, 505, 505};
    int tables2[] = {0, 1, 0, 1, 2};
    int tables3[] = {7, 3, 3, 7, 10};
    
    printf("%d\n", findUnique(tables1, 9));  // 404
    printf("%d\n", findUnique(tables2, 5));  // 2
    printf("%d\n", findUnique(tables3, 5));  // 10
    
    return 0;
}

运行结果

相关推荐
小向是个Der6 小时前
嵌入式进阶——MCU上电后的动作
c语言·单片机·mcu·学习·链接脚本
路灯上の马陈7 小时前
二叉树的定义与性质
数据结构·二叉树·树结构·1024程序员节
bkspiderx9 小时前
基于Socket的广播通信及C语言实现详解
c语言·开发语言·socket·广播·socket的广播通信
Bshaya_10 小时前
红黑树详解:概念、规则与插入实现
数据结构·红黑树·二叉搜索树·平衡树·插入逻辑
WBluuue11 小时前
数据结构与算法:分块(一):块状数组、块状链表
数据结构·c++·算法·链表
路灯上の马陈12 小时前
数据结构-树
数据结构·1024程序员节
benjormin12 小时前
Java数据结构 二叉搜索树
数据结构·算法
LDR00613 小时前
LDR6100 智能遥控器精品软文:Type-C 充电口与低功耗量产维护
c语言·开发语言
H.莓飛16 小时前
【数据结构】排序总结与规模实测
linux·服务器·开发语言·数据结构·visual studio·1024程序员节
FLJwu16 小时前
运动相机采购实战|第四篇(终章):一张清单走完选型全流程,把风险拦在源头
c语言·开发语言·数码相机·运动相机·oem 量产