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

运行结果

相关推荐
爱读书的小胖4 小时前
Codewars:Rot13(C)解题分析
c语言·开发语言
by209994 小时前
哈希表——快速找到数据:冲突、删除与扩容的实现
数据结构·c++·哈希算法·散列表
Code_Solitude5 小时前
c语言:关于qsoet函数知识点
c语言·数据结构·算法
鸽鸽程序猿5 小时前
【项目】【在线判题系统】c端:竞赛报名
c语言·开发语言
Pniubi6 小时前
快速排序(力扣基础)(递归)
java·数据结构·算法
H.莓飛6 小时前
【Linux】自主 Shell
linux·运维·服务器·c语言·开发语言·visual studio
爱读书的小胖7 小时前
Codewars:Last digit of a large number(C)解题分析
c语言·开发语言·r语言
2601_955518187 小时前
C# 数组 - FindIndex() 方法
c·教程·数组·示例·findindex()
想做小南娘,发现自己是女生喵7 小时前
第二周学习文档 Linux C 文件操作
linux·c语言·学习
Bluetooth7308 小时前
c语言变量的存储类别
c语言