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

运行结果

相关推荐
码少女14 分钟前
数据结构——图的基础
数据结构
Severus_black2 小时前
【C++初阶】list使用及相关实现,思路顺滑流畅!
c语言·数据结构·c++·stl·list
二本咕咕-机械转码4 小时前
FreeRTOS深入解析(八)IPC机制之FromISR详解
数据结构·单片机·链表
1-1=06 小时前
C# 数据结构和特殊类型
数据结构·c#·.net·.netcore
希和20276 小时前
C语言程序设计题|有序数组插入数字冒泡排序
c语言·数据结构·算法
布莱克60517 小时前
C++ 中 map 的 insert 与 emplace:key 已存在时会覆盖吗?
开发语言·数据结构·c++·算法·map
D e re k ZH20 小时前
C++ 系统学习手记:从语法细节到工程实践
开发语言·数据结构·c++·算法
Zwawa1 天前
屏幕不止一种:OLED、LCD1602字符屏、TFT/IPS图形屏和串口屏怎么用,这与TTY和PTY又有什么关系
c语言·单片机·嵌入式
Fruiticecake1 天前
C 程序员速通现代 C++(一):lambda、std::function、移动语义与智能指针
c语言·c++
田甲1 天前
做一款 Type-C 母座读卡器:GL3224 双卡方案实测
c语言·开发语言