ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

C语言/数据结构位运算题解:异或XOR找出武术比赛中的“秘密武器战力值“——只出现一次的数字

C语言/数据结构位运算题解:异或XOR找出武术比赛中的“秘密武器战力值“——只出现一次的数字 问题描述在学校的武术比赛中每个班级需要选出若干同学组成战队每位同学都有一个整数战力值。已知班级中除了一个同学的战力值只出现一次外其他所有同学的战力值都恰好出现了两次即有两名同学拥有相同的战力值。班长小C想要找出那个只出现一次的战力值因为这位同学可能是战队的秘密武器要求设计一个算法在时间复杂度 O(n) 内找到那个只出现一次的战力值其中 n 是班级的人数。尽量减少额外空间的使用以体现你的算法优化能力。测试样例样例1输入power [5, 3, 5, 2, 3, 4, 4, 6, 6]输出2解释数组中所有战力值都成对出现5出现2次、3出现2次、4出现2次、6出现2次只有2出现1次因此输出2。样例2输入power [10, 20, 10, 30, 20, 40, 40]输出30解释数组中10出现2次、20出现2次、40出现2次只有30出现1次因此输出30。样例3输入power [1, 1, 2, 2, 3, 3, 8, 8, 9]输出9解释数组中1出现2次、2出现2次、3出现2次、8出现2次只有9出现1次因此输出9。约束条件1 ≤ power.length ≤ 10010 ≤ power[i] ≤ 1000班级人数为奇数即 power.length 为奇数数组中除了一个战力值只出现一次外其余每个战力值都恰好出现两次输入保证有且只有一个战力值出现一次其余都出现两次程序代码#include stdio.hint findUnique(int* power, int powerSize) {int result 0;for (int i 0; i powerSize; i) {result ^ power[i];}return result;}int main() {int test1[] {5, 3, 5, 2, 3, 4, 4, 6, 6};int test2[] {10, 20, 10, 30, 20, 40, 40};int test3[] {1, 1, 2, 2, 3, 3, 8, 8, 9};printf(%d\n, findUnique(test1, 9)); // 2printf(%d\n, findUnique(test2, 7)); // 30printf(%d\n, findUnique(test3, 9)); // 9return 0;}#include stdio.h int findUnique(int* power, int powerSize) { int result 0; for (int i 0; i powerSize; i) { result ^ power[i]; } return result; } int main() { int test1[] {5, 3, 5, 2, 3, 4, 4, 6, 6}; int test2[] {10, 20, 10, 30, 20, 40, 40}; int test3[] {1, 1, 2, 2, 3, 3, 8, 8, 9}; printf(%d\n, findUnique(test1, 9)); // 2 printf(%d\n, findUnique(test2, 7)); // 30 printf(%d\n, findUnique(test3, 9)); // 9 return 0; }运行结果
返回列表