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

运行结果

相关推荐
endeavor122 小时前
BootLoader与OTA学习(三)
c语言·stm32
wabs6662 小时前
关于二叉树【力扣100.相同的树的思考】
数据结构·c++·算法·leetcode·二叉树·递归法
布莱克6053 小时前
理解内存泄漏:成因、发现方法与解决策略(C++ 举例)
c语言·c++·内存泄漏
qianyanwanyv4 小时前
数据结构概念
数据结构
Logic1014 小时前
C语言/数据结构位运算题解:异或XOR找出英雄升级系统中的“独特经验值“——只出现一次的数字
c语言·数据结构·数组·位运算·时间复杂度·算法题·异或性质
梦帮科技12 小时前
AI 音乐产品的发布工程:验证门、数据发布、回滚与生产运维纪律
数据结构·数据库·架构·node.js·音视频·动态规划·推荐算法
C++ 老炮儿的技术栈13 小时前
我们在设计tcp协议时,要传一个字符串过去,报文:头十长度十内容,是否要把‘\0‘也填入,长度是否包含‘\0‘
开发语言·数据结构·c++·mfc·c
Navigator_Z15 小时前
LeetCode //C - 1252. Cells with Odd Values in a Matrix
c语言·算法·leetcode