☰
C语言/数据结构位运算题解:异或XOR找出挑战赛中的“独特能量球“——只出现一次的数字
2026/9/28 20:35:55 网站建设 项目流程

问题描述

小M正在参加一个能力选择挑战赛,他面前有多个能量球,每个能量球上都有一个整数能量值。挑战规则是:所有的能量球都成对出现(即每个能量值恰好出现两次),但有一个能量球是独特的,它的能量值只出现一次。小M需要快速找出这个独特能量球的能量值,才能通过挑战。

要求:

  1. 设计一个算法,在 O(n) 的时间复杂度内找出独特的能量值,其中 n 是能量球的数量。
  2. 尽量减少额外空间的使用,以展示你的算法优化技巧。

测试样例

样例1:

输入:energy = [5, 3, 5, 2, 3, 1, 1]输出:2解释:能量值 2 只出现一次,是独特的能量球。

样例2:

输入:energy = [10, 20, 10, 30, 20, 40, 40]输出:30解释:30 是唯一一个不重复的能量值。

样例3:

输入:energy = [0, 1, 1, 2, 2, 3, 3]输出:0解释:0 只出现一次,其余能量值都成对出现。

约束条件

  • 1 ≤ energy.length ≤ 1001
  • 0 ≤ energy[i] ≤ 1000
  • 能量球的数量为奇数
  • 除了一个能量值只出现一次外,其余每个能量值都恰好出现两次

程序代码

#include <stdio.h>

int findUnique(int* energy, int energySize) {

int result = 0;

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

result ^= energy[i];

}

return result;

}

int main() {

int energy1[] = {5, 3, 5, 2, 3, 1, 1};

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

int energy3[] = {0, 1, 1, 2, 2, 3, 3};

printf("%d\n", findUnique(energy1, 7)); // 2

printf("%d\n", findUnique(energy2, 7)); // 30

printf("%d\n", findUnique(energy3, 7)); // 0

return 0;

}

#include <stdio.h> int findUnique(int* energy, int energySize) { int result = 0; for (int i = 0; i < energySize; i++) { result ^= energy[i]; } return result; } int main() { int energy1[] = {5, 3, 5, 2, 3, 1, 1}; int energy2[] = {10, 20, 10, 30, 20, 40, 40}; int energy3[] = {0, 1, 1, 2, 2, 3, 3}; printf("%d\n", findUnique(energy1, 7)); // 2 printf("%d\n", findUnique(energy2, 7)); // 30 printf("%d\n", findUnique(energy3, 7)); // 0 return 0; }

运行结果

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询