
问题描述小M是一位勇敢的太空探险家他在探索一颗神秘星球时发现了一串奇特的能量石序列。这些能量石上刻有不同的整数能量值但奇怪的是除了一个能量石的能量值之外其他所有能量值都恰好出现了两次。传说中那个独特的能量石是打开星球宝藏的关键小M需要你的帮助快速找出那个独特能量石的能量值以便继续他的冒险。要求设计一个算法在 O(n) 的时间复杂度内找出只出现一次的能量值其中 n 是能量石的数量。尽量减少额外空间的使用以展现你的算法优化技巧。测试样例样例1输入energyStones [5, 3, 5, 2, 3, 8, 8]输出2解释能量值 5、3、8 都出现了两次只有 2 出现一次因此 2 是独特的能量石。样例2输入energyStones [10, 20, 10, 30, 20, 40, 40]输出30解释能量值 10、20、40 都出现了两次只有 30 出现一次因此 30 是独特的能量石。样例3输入energyStones [0, 1, 1, 2, 2, 3, 3]输出0解释能量值 1、2、3 都出现了两次只有 0 出现一次因此 0 是独特的能量石。样例4输入energyStones [5]输出5解释只有一个能量石因此 5 就是独特的能量石。约束条件1 ≤ energyStones.length ≤ 10010 ≤ energyStones[i] ≤ 1000能量石的数量为奇数除了一个能量值只出现一次外其余每个能量值都恰好出现两次程序代码#include stdio.hint findUnique(int* energyStones, int energyStonesSize) {int result 0;for (int i 0; i energyStonesSize; i) {result ^ energyStones[i];}return result;}int main() {int test1[] {5, 3, 5, 2, 3, 8, 8};int test2[] {10, 20, 10, 30, 20, 40, 40};int test3[] {0, 1, 1, 2, 2, 3, 3};int test4[] {5};printf(%d\n, findUnique(test1, 7)); // 2printf(%d\n, findUnique(test2, 7)); // 30printf(%d\n, findUnique(test3, 7)); // 0printf(%d\n, findUnique(test4, 1)); // 5return 0;}#include stdio.h int findUnique(int* energyStones, int energyStonesSize) { int result 0; for (int i 0; i energyStonesSize; i) { result ^ energyStones[i]; } return result; } int main() { int test1[] {5, 3, 5, 2, 3, 8, 8}; int test2[] {10, 20, 10, 30, 20, 40, 40}; int test3[] {0, 1, 1, 2, 2, 3, 3}; int test4[] {5}; printf(%d\n, findUnique(test1, 7)); // 2 printf(%d\n, findUnique(test2, 7)); // 30 printf(%d\n, findUnique(test3, 7)); // 0 printf(%d\n, findUnique(test4, 1)); // 5 return 0; }运行结果