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

运行结果

相关推荐
quaer11 小时前
弗洛伊德算法--判圈法寻找环的入口O(n) O(1)
数据结构·算法
鱼很腾apoc15 小时前
【MySQL】第4期 用户管理与 C 语言连接编程详解
linux·服务器·c语言·mysql·connector/c
xys_67815 小时前
深挖数据结构:树和二叉树(上)
数据结构·算法
BeiGuTing_code15 小时前
Java动态数组(一)
java·数据结构·windows
himobrinehacken17 小时前
位运算揭秘:左右移与符号位陷阱
c语言·c++·算法·安全
Code_Solitude19 小时前
传智杯备赛代码整理(前4题)
数据结构·算法
水饺编程19 小时前
第2章:Linux 基础,rm 命令
linux·c语言·汇编
Jasmine_llq19 小时前
《P8816 [CSP-J 2022] 上升点列》
数据结构·算法·贪心·排序·二维动态规划 dp·类背包状态转移
夏虫不可与之言冰19 小时前
第三课 点亮 LED 与定时器非阻塞闪烁
c语言·c++·vscode·单片机·嵌入式硬件·物联网
辛苦才能20 小时前
C++ 哈希表深度解析:删除为什么必须打标记,负载因子为什么卡 0.7
开发语言·数据结构·c++·算法