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

84 阅读2分钟

问题描述

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

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


测试样例

样例1:

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

样例2:

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

样例3:

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

问题解析

首先,对问题本身进行分析,得到两个条件:

  1. 等级增加的条件:只有当两个英雄等级不同时,等级较高的英雄才会增加1级。
  2. 潜力英雄的定义:一个英雄有潜力达到2000000000000000级,意味着它可以通过与其他英雄的历练不断增加等级。

由此可得,一个英雄想要成为潜力英雄,必须能够不断升级,也就是至少存在一名等级比它低的英雄。反过来说,一个英雄如果是英雄列表里等级最低的英雄,那么它必然无法升级,不可能成为潜力英雄。

解题思路

  1. 找出最低等级:首先,找出所有英雄中等级最低的英雄。因为只有当一个英雄的等级高于最低等级时,它才有潜力通过历练增加等级。
  2. 统计最低等级的英雄数量:计算等级最低的英雄的数量。
  3. 计算有潜力的英雄数量:所有英雄中,除了等级最低的英雄,其他英雄都有潜力通过历练增加等级。因此,有潜力的英雄数量就是总英雄数减去最低等级英雄的数量。

数据结构选择

  • 使用列表来存储英雄的等级。
  • 使用内置函数min()来找出最低等级。
  • 使用count()方法来统计最低等级英雄的数量。

算法步骤

  1. 找出英雄等级的最小值。
  2. 统计等级等于最小值的英雄数量。
  3. 计算有潜力的英雄数量,即总英雄数减去最低等级英雄的数量。

代码

def solution(n: int, u: list) -> int:
    fail = min(u)
    fail_num = u.count(fail)
    return n - fail_num

总结

通过找到最低等级英雄,并将英雄总数减去最低等级英雄数量,就可以求得潜力英雄数量,解决问题。