C语言/数据结构位运算题解:异或XOR找出游戏速通中的“独特初始能量值“——只出现一次的数字

问题描述

小M最近沉迷于《光明之魂》这款游戏,他正在进行速通挑战。游戏中有多个关卡,每个关卡都有一个初始能量值。有趣的是,除了一个关卡的初始能量值之外,所有其他关卡的初始能量值都恰好出现了两次。小M需要快速找到那个拥有独特初始能量值的关卡,以便优先突破,完成速通挑战。

要求:

  1. 设计一个算法,在时间复杂度为 O(n) 内找到独特的初始能量值,其中 n 是关卡的数量。
  2. 尽量减少额外空间的使用,以优化算法的性能。

测试样例

样例1:

输入:energies = [3, 5, 3, 5, 7, 9, 9] 输出:7 解释:初始能量值 3、5、9 都出现了两次,只有 7 出现了一次,因此 7 是独特的关卡。

样例2:

输入:energies = [10, 20, 10, 30, 20, 40, 40] 输出:30 解释:初始能量值 10、20、40 都出现了两次,只有 30 出现了一次,因此 30 是独特的关卡。

样例3:

输入:energies = [1, 2, 1, 2, 3, 4, 4, 5, 5] 输出:3 解释:初始能量值 1、2、4、5 都出现了两次,只有 3 出现了一次,因此 3 是独特的关卡。

约束条件

  • 1 ≤ energies.length ≤ 1001
  • 0 ≤ energiesi ≤ 1000
  • 关卡数量(即数组长度)为奇数
  • 除了一个初始能量值只出现一次外,其余每个初始能量值都恰好出现两次

程序代码

#include <stdio.h>

int findUnique(int* energies, int energiesSize) {

int result = 0;

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

result ^= energiesi;

}

return result;

}

int main() {

int energies1\[\] = {3, 5, 3, 5, 7, 9, 9};

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

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

int size1 = sizeof(energies1) / sizeof(energies10);

int size2 = sizeof(energies2) / sizeof(energies20);

int size3 = sizeof(energies3) / sizeof(energies30);

printf("%d\n", findUnique(energies1, size1)); // 7

printf("%d\n", findUnique(energies2, size2)); // 30

printf("%d\n", findUnique(energies3, size3)); // 3

return 0;

}

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

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

int main() {
    int energies1[] = {3, 5, 3, 5, 7, 9, 9};
    int energies2[] = {10, 20, 10, 30, 20, 40, 40};
    int energies3[] = {1, 2, 1, 2, 3, 4, 4, 5, 5};
    
    int size1 = sizeof(energies1) / sizeof(energies1[0]);
    int size2 = sizeof(energies2) / sizeof(energies2[0]);
    int size3 = sizeof(energies3) / sizeof(energies3[0]);
    
    printf("%d\n", findUnique(energies1, size1));  // 7
    printf("%d\n", findUnique(energies2, size2));  // 30
    printf("%d\n", findUnique(energies3, size3));  // 3
    
    return 0;
}

运行结果

相关推荐
Chen—LSN2 小时前
C语言——⽂件操作(1)
c语言·开发语言·c++·经验分享·笔记·算法·链表
木由里予2 小时前
GDB 使用手册(详细版)
c语言·vscode
Chen—LSN3 小时前
C语言——文件操作(2)
c语言·开发语言·c++·经验分享·笔记·算法·c#
Bruce_Liuxiaowei3 小时前
Python 字典默认值完全指南:从 KeyError 到 defaultdict
开发语言·数据结构·python·字典
Escalating_xu3 小时前
【C 语言】深入理解指针(2):数组名、数组传参、二级指针与指针数组
java·c语言·开发语言
心中有你02145 小时前
C语言实现文件异或加密与RLE压缩算法
c语言·开发语言
阿钱真强道5 小时前
18 嵌入式操作系统 | uloop 定时器:周期任务与网络上报
c语言·定时器·周期任务·uloop
多多爱学习5 小时前
括号有几层?得看还有多少个左括号没闭合
c语言·c++·算法·面试
AI+程序员在路上5 小时前
AP6275S蓝牙双接口解析:HCI UART与PCM的分工与协同
linux·c语言·物联网