C语言/数据结构位运算题解:异或XOR找出英雄队伍中的“独特战斗力“——只出现一次的数字

问题描述

小强最近沉迷于一款英雄对战游戏,他需要组建一支英雄队伍来通关副本。每个英雄都有一个独特的战斗力数值,但游戏规则特殊:除了一个英雄的战斗力数值只出现一次外,其余每个战斗力数值都恰好出现两次(即有两个英雄拥有相同的战斗力)。这个独特的英雄拥有特殊的技能,能够帮助队伍轻松通关。

小强希望你能帮他快速找出这个独特战斗力数值的英雄,以便优先招募。请你设计一个高效的算法,在 O(n) 的时间复杂度内找出这个独特的数值,并尽量减少额外空间的使用。

测试样例

样例1:

输入:heroes = [5, 10, 5, 20, 10, 30, 20] 输出:30 解释:战斗力数值 5 出现两次(索引0和2),10 出现两次(索引1和4),20 出现两次(索引3和6),30 只出现一次(索引5),因此 30 是独特的数值。

样例2:

输入:heroes = [100, 200, 100, 300, 200, 400, 300] 输出:400 解释:100 出现两次(索引0和2),200 出现两次(索引1和4),300 出现两次(索引3和6),400 只出现一次(索引5),因此 400 是独特的数值。

样例3:

输入:heroes = [1, 1, 2, 2, 3, 4, 4] 输出:3 解释:数值 1 出现两次(索引0和1),2 出现两次(索引2和3),4 出现两次(索引5和6),3 只出现一次(索引4),因此 3 是独特的数值。

约束条件

  • 1 ≤ heroes.length ≤ 1001
  • 0 ≤ heroesi ≤ 1000
  • 队伍大小为奇数
  • 除了一个英雄的战斗力数值只出现一次外,其余每个战斗力数值都恰好出现两次

程序代码

#include <stdio.h>

int findUnique(int* heroes, int heroesSize) {

int result = 0;

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

result ^= heroesi;

}

return result;

}

int main() {

int heroes1\[\] = {5, 10, 5, 20, 10, 30, 20};

int heroes2\[\] = {100, 200, 100, 300, 200, 400, 300};

int heroes3\[\] = {1, 1, 2, 2, 3, 4, 4};

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

printf("%d\n", findUnique(heroes2, 7)); // 400

printf("%d\n", findUnique(heroes3, 7)); // 3

return 0;

}

cpp 复制代码
#include <stdio.h>

int findUnique(int* heroes, int heroesSize) {
    int result = 0;
    for (int i = 0; i < heroesSize; i++) {
        result ^= heroes[i];
    }
    return result;
}

int main() {
    int heroes1[] = {5, 10, 5, 20, 10, 30, 20};
    int heroes2[] = {100, 200, 100, 300, 200, 400, 300};
    int heroes3[] = {1, 1, 2, 2, 3, 4, 4};
    
    printf("%d\n", findUnique(heroes1, 7));  // 30
    printf("%d\n", findUnique(heroes2, 7));  // 400
    printf("%d\n", findUnique(heroes3, 7));  // 3
    
    return 0;
}

运行结果

相关推荐
小鱼仙官11 小时前
使用Qt封装C/C++ 动态库 用于第三方调用
c语言·c++·qt
GG.WinGel13 小时前
三元组中心问题
java·数据结构·算法·青少年编程·蓝桥杯
程序员清风13 小时前
缓存、索引与数据结构的工程选择
数据结构·spring·缓存
FLJwu14 小时前
运动相机图像传感器选型实战|第二篇:参数看着一模一样,为什么骑行录像疯狂果冻、拖影翻车?
android·c语言·开发语言·数码相机·运动相机·oem 量产
Escalating_xu14 小时前
【C语言项目实战】贪吃蛇(下):移动、碰撞与计分,完成一局可玩的游戏
c语言·开发语言·游戏
爱吃火鸡面呀14 小时前
Doris 数据划分实战:List 分区、分桶列与桶数选择
数据结构·list
C++ 老炮儿的技术栈15 小时前
机器人的坐标,像 XYZ 的坐标值,是用单精度浮点还是用双精度浮点?
c语言·c++·人工智能·单片机·c
BK贝壳21 小时前
亿级用户签到位图选型复盘:用 bool-hybrid-array 扛冷启动打卡,也把它和 Roaring/Redis 的边界测清楚了
数据结构·python·性能优化·numpy
挖井观天1 天前
《Java数据结构》第一讲:顺序表
数据结构
lhbweilai1 天前
分析FreeRTOS内核对象API的源码实现(八)
c语言·开发语言·stm32·单片机