C语言/数据结构位运算题解:异或XOR找出书柜中编号只出现一次的那一层——只出现一次的数字

问题描述

小M最近买了一个新书柜,书柜有若干层,每层有一个独特的编号(但不同层的编号可能相同)。有趣的是,除了某一层的编号只出现一次外,其他每个编号都恰好出现在两层书柜上(即每个编号都恰好出现两次)。小M想知道,那个编号只出现一次的书柜是哪一层?

要求:

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

测试样例

样例1:

输入:shelves = [3, 5, 3, 2, 5, 4, 2] 输出:4 解释:编号4出现1次,编号3、5、2各出现2次,所以独特编号是4。

样例2:

输入:shelves = [10, 20, 10, 30, 20, 40, 40] 输出:30 解释:编号30出现1次,编号10、20、40各出现2次,所以独特编号是30。

样例3:

输入:shelves = [1, 1, 2, 2, 3, 3, 4, 4, 5] 输出:5 解释:编号5出现1次,编号1、2、3、4各出现2次,所以独特编号是5。

约束条件

  • 1 ≤ shelves.length ≤ 1001
  • 0 ≤ shelvesi ≤ 1000
  • 书柜层数为奇数
  • 除了一个书柜编号只出现一次外,其余每个书柜编号都恰好出现两次

程序代码

#include <stdio.h>

int findUnique(int* shelves, int shelvesSize) {

int result = 0;

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

result ^= shelvesi;

}

return result;

}

int main() {

int shelves1\[\] = {3, 5, 3, 2, 5, 4, 2};

int shelves2\[\] = {10, 20, 10, 30, 20, 40, 40};

int shelves3\[\] = {1, 1, 2, 2, 3, 3, 4, 4, 5};

printf("%d\n", findUnique(shelves1, 7)); // 4

printf("%d\n", findUnique(shelves2, 7)); // 30

printf("%d\n", findUnique(shelves3, 9)); // 5

return 0;

}

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

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

int main() {
    int shelves1[] = {3, 5, 3, 2, 5, 4, 2};
    int shelves2[] = {10, 20, 10, 30, 20, 40, 40};
    int shelves3[] = {1, 1, 2, 2, 3, 3, 4, 4, 5};
    
    printf("%d\n", findUnique(shelves1, 7));  // 4
    printf("%d\n", findUnique(shelves2, 7));  // 30
    printf("%d\n", findUnique(shelves3, 9));  // 5
    
    return 0;
}

运行结果

相关推荐
青山木2 小时前
Hot 100 --- 下一个排列
java·数据结构·算法·leetcode
SelectDB技术团队3 小时前
Apache Doris 高性能 Open Lake Variant 读写技术解析(含对比数据)
数据结构·数据库·clickhouse·日志·apache doris·selectdb·湖仓架构升级
kiracrimson4 小时前
希尔排序:让插入排序不再怕逆序
数据结构·算法·排序算法
Logic1014 小时前
C语言/数据结构位运算题解:异或XOR找出星球探险中的“独特能量石“——只出现一次的数字
c语言·数据结构·数组·位运算·时间复杂度·算法题·异或性质
Escalating_xu4 小时前
【C 语言】深入理解指针(3):字符指针、数组指针、二维数组传参、函数指针与转移表
java·c语言·开发语言
垆边人似月.4 小时前
华为机考题:最小代价爬楼梯
c语言·c++
垆边人似月.5 小时前
华为机考题:二叉树的最大路径和
c语言·c++
程序猿编码5 小时前
不用 PyTorch!纯 C 实现 N 维张量 + 反向传播,完成手写数字识别训练
c语言·人工智能·pytorch·神经网络·卷积神经网络·大模型推理
hnjzsyjyj6 小时前
洛谷 P1339:[USACO09OCT] Heat Wave G ← Bellman-Ford 算法
数据结构·bellman-ford 算法