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

运行结果

相关推荐
Hhy_11079 小时前
《C++深度解构06》手撕 string —— 从底层内存管理到深浅拷贝彻底吃透
c语言·开发语言·c++·学习·visual studio
曦樂~20 小时前
Cpp面筋
c语言·c++
十二1 天前
【洛谷题解】P1083 [NOIP 2012 提高组] 借教室(二分答案 + 差分)
数据结构·c++·算法·蓝桥杯
D e re k ZH1 天前
C++ 从零入门(一):基础语法与程序结构
数据结构·c++·算法
careathers1 天前
【数据结构】基于比较的排序算法 - 交换排序
数据结构·算法·排序算法
HUANGZHENXUAN1231 天前
最大子矩阵和:从 O(n⁴) 到 O(n³) 的列压缩 + Kadane
c语言·前端
H.莓飛1 天前
【C++】【STL】vector_OJ题
linux·服务器·开发语言·数据结构·c++·visual studio
§ꦿCFོ༉1 天前
嵌入式八股文—C语言入门学习(二)
c语言·学习·嵌入式·编程语言
David猪大卫2 天前
【Linux修炼】环境变量、进程地址空间
linux·c语言·经验分享·笔记·学习·ubuntu·centos
老师我太想进步了20262 天前
【数据结构-4】算法美学之顺序表
数据结构·算法