C语言/数据结构位运算题解:异或XOR找出英雄升级系统中的“独特经验值“——只出现一次的数字

问题描述

小明是一名游戏设计师,他正在设计一款英雄升级系统。游戏中,英雄每完成一个任务会获得一定数量的经验值奖励(用整数表示)。有趣的是,除了一个特殊任务外,其他所有任务给出的经验值奖励都恰好出现了两次。这个特殊任务会给出独特的经验值奖励,帮助英雄快速升级。

现在需要你帮助小明快速找出这个独特经验值奖励是多少,以便他调整游戏平衡性。

要求:

  1. 设计一个算法,使其时间复杂度为 O(n),其中 n 是任务的数量。
  2. 尽量减少额外空间的使用,以体现你的算法优化能力。

测试样例

样例1:

输入:rewards = [50, 50, 100, 100, 200, 200, 300, 500, 500] 输出:300 解释:300 经验值的奖励是唯一没有重复出现的。

样例2:

输入:rewards = [0, 5, 0, 5, 10] 输出:10 解释:10 经验值的奖励只出现一次,是独特的任务奖励。

样例3:

输入:rewards = [80, 30, 30, 80, 150] 输出:150 解释:150 是奖励列表中唯一不重复的经验值。

约束条件

  • 1 ≤ rewards.length ≤ 1001
  • 0 ≤ rewardsi ≤ 1000
  • 任务数量为奇数
  • 除了一个经验值奖励只出现一次外,其余每个经验值奖励都恰好出现两次

程序代码

#include <stdio.h>

int findUnique(int* rewards, int rewardsSize) {

int result = 0;

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

result ^= rewardsi;

}

return result;

}

int main() {

int rewards1\[\] = {50, 50, 100, 100, 200, 200, 300, 500, 500};

int rewards2\[\] = {0, 5, 0, 5, 10};

int rewards3\[\] = {80, 30, 30, 80, 150};

int size1 = sizeof(rewards1) / sizeof(rewards10);

int size2 = sizeof(rewards2) / sizeof(rewards20);

int size3 = sizeof(rewards3) / sizeof(rewards30);

printf("%d\n", findUnique(rewards1, size1)); // 300

printf("%d\n", findUnique(rewards2, size2)); // 10

printf("%d\n", findUnique(rewards3, size3)); // 150

return 0;

}

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

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

int main() {
    int rewards1[] = {50, 50, 100, 100, 200, 200, 300, 500, 500};
    int rewards2[] = {0, 5, 0, 5, 10};
    int rewards3[] = {80, 30, 30, 80, 150};
    
    int size1 = sizeof(rewards1) / sizeof(rewards1[0]);
    int size2 = sizeof(rewards2) / sizeof(rewards2[0]);
    int size3 = sizeof(rewards3) / sizeof(rewards3[0]);
    
    printf("%d\n", findUnique(rewards1, size1));  // 300
    printf("%d\n", findUnique(rewards2, size2));  // 10
    printf("%d\n", findUnique(rewards3, size3));  // 150
    
    return 0;
}

运行结果

相关推荐
梦帮科技10 小时前
AI 音乐产品的发布工程:验证门、数据发布、回滚与生产运维纪律
数据结构·数据库·架构·node.js·音视频·动态规划·推荐算法
C++ 老炮儿的技术栈11 小时前
我们在设计tcp协议时,要传一个字符串过去,报文:头十长度十内容,是否要把‘\0‘也填入,长度是否包含‘\0‘
开发语言·数据结构·c++·mfc·c
Navigator_Z12 小时前
LeetCode //C - 1252. Cells with Odd Values in a Matrix
c语言·算法·leetcode
青山木14 小时前
Hot 100 --- 最长有效括号
java·数据结构·算法·leetcode·动态规划
是隼人14 小时前
buuctf-pwn [NewStarCTF 2023 公开赛道]stack migration(64位栈迁移)题解(学习过程持续更新)
c语言·学习·安全·pwn入门·ctf入门
爱吃苹果的日记本16 小时前
数据结构第五课
数据结构·学习
Logic10117 小时前
C语言/数据结构贪心算法题解:买卖股票的最佳时机——一次交易最大利润(O(n)时间O(1)空间)
c语言·数据结构·贪心算法·数组·时间复杂度·算法题·股票交易
Logic10117 小时前
C语言/数据结构位运算题解:异或XOR找出货币交易中的“独特面值“——只出现一次的数字
c语言·数据结构·数组·位运算·时间复杂度·算法题·异或性质
ctlover18 小时前
数据结构:树
数据结构·python