题解-游戏英雄升级潜力评估 | 豆包MarsCode AI刷题

122 阅读3分钟

问题描述

小U在一款挂机游戏中拥有n个英雄。游戏中有一种历练升级机制,每天可以选择两个英雄进行历练,如果两位英雄的等级相同,则他们的等级都不会改变。如果英雄等级不同,那么等级较高的英雄会增加1级,而等级较低的英雄则保持不变。

小U希望至少有一个英雄能够达到2000000000000000级,他想知道有多少英雄有潜力通过历练达到这个等级。

测试样例

样例1:

输入:n = 5 ,u = [1, 2, 3, 1, 2]
输出:3

样例2:

输入:n = 4 ,u = [100000, 100000, 100000, 100000]
输出:0

问题分析

首先,我们要理解游戏中的历练升级机制。每天,小U可以选择两个英雄进行历练,但升级的条件非常特殊:只有当两个英雄的等级不同,且等级较高的英雄才会增加1级。这意味着,如果两个英雄等级相同,历练将不会有任何效果。这种机制使得英雄之间的等级差距成为了升级的关键。

为了帮助小U判断有多少英雄有潜力达到2000000000000000级,我们需要关注以下几个关键点:

  1. 等级差异的重要性:由于只有等级较高的英雄在历练中能获得等级提升,因此,等级较高的英雄具有更大的升级潜力。这意味着,如果一个英雄的等级高于其他所有英雄,它将不断获得升级机会。
  2. 最小等级的参考价值:在所有英雄中,等级最小的英雄无法通过与其他英雄的历练获得等级提升。因此,我们可以将最小等级作为一个参考点,来判断其他英雄是否有升级潜力。
  3. 统计有潜力升级的英雄数量:通过比较每个英雄的等级与最小等级,我们可以统计出有多少英雄的等级高于最小等级,从而判断它们是否有潜力通过历练达到极高的等级。

解题思路

  1. 找出英雄等级最小值:利用algorithm库的min_element函数找到vector数组中英雄等级的最小值min_level。
  2. 遍历数组:遍历数组并统计英雄等级大于min_level的数目。
  3. 返回结果:返回上述统计的数目,即为有潜力升级的英雄数量。

代码实现

#include <iostream>
#include <vector>
#include <algorithm>

int solution(int n, std::vector<int> u) {
    auto min_level = std::min_element(u.begin(), u.end());
    int count = 0;
    for(auto i: u)
    {
        if(i>*min_level)
            count++;
    }

    return count;
}

int main() {
    std::cout << (solution(5, {1, 2, 3, 1, 2}) == 3) << std::endl;
    std::cout << (solution(4, {100000, 100000, 100000, 100000}) == 0) << std::endl;
    std::cout << (solution(6, {1, 1, 1, 2, 2, 2}) == 3) << std::endl;
}