题目:小U的挂机游戏英雄历练问题
问题描述
小U在一款挂机游戏中拥有n个英雄。游戏中有一种历练升级机制,每天可以选择两个英雄进行历练,如果两位英雄的等级相同,则他们的等级都不会改变。如果英雄等级不同,那么等级较高的英雄会增加1级,而等级较低的英雄则保持不变。
小U希望至少有一个英雄能够达到2000000000000000级,他想知道有多少英雄有潜力通过历练达到这个等级。
输入与输出
- 输入:两个参数,
n
表示英雄的数量,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
问题分析
这个问题的关键在于理解历练机制如何影响英雄的等级提升,并计算出在给定的历练规则下,哪些英雄有可能达到目标等级。由于历练机制的特点,可以推断出,只有等级最高的英雄有可能达到目标等级,因为只有他们能够持续获得等级提升。
解决方案
- 排序:首先需要对英雄的等级进行排序,以便快速识别出等级最高的英雄群体。
- 计算最大等级:找出数组
u
中的最大值,这代表了所有英雄中最高的初始等级。 - 计算潜力英雄数量:计算出达到目标等级所需的等级差,即2000000000000000减去最大等级。然后,计算出在历练机制下,等级最高的英雄群体需要多少次历练才能达到目标等级。如果这个次数小于或等于英雄数量,那么这些英雄都有潜力达到目标等级。
- 输出结果:输出有潜力达到目标等级的英雄数量。
实现步骤
- 对数组
u
进行排序。 - 找出数组
u
中的最大值max_level
。 - 计算目标等级与最大等级的差值
target_diff = 2000000000000000 - max_level
。 - 如果
target_diff
小于或等于0,说明最大等级已经达到或超过目标等级,输出n
。 - 否则,计算出达到目标等级所需的历练次数
历练次数 = target_diff
。 - 如果
历练次数
小于或等于n
,输出n - u.count(max_level) + 1
(因为等级最高的英雄群体都有潜力达到目标等级)。 - 否则,输出0,因为即使所有英雄都参与历练,也无法达到目标等级。
之前的思路是这样,排序、先考虑最大等级的,达到满级后再考虑后面的,后来发现,只要存在一个高等级的英雄和一个低等级的英雄,就一定可以让他俩一直历练,最后肯定能把高等级的升到满级;
所以,换个思路:初始情况下,等级不是最低的英雄都可以通过和等级最低的英雄(可能不止一个)历练,从而升满,所以可以直接从原来的英雄数量中减去等级最低英雄的数量,就得到的能升满的英雄数量。
发现是能跑通的,不存在上面所说的英雄的初始等级已经超过满级的情况...
def solution(n, u):
min_level=min(u)
min_count=len([i for i in u if i==min_level])
return len(u)-min_count
if __name__ == '__main__':
print(solution(n = 5, u = [1, 2, 3, 1, 2]) == 3)
print(solution(n = 4, u = [100000, 100000, 100000, 100000]) == 0)
print(solution(n = 6, u = [1, 1, 1, 2, 2, 2]) == 3)
总结
理解历练机制和如何通过排序和简单的数学计算来确定结果;
可能有时候把问题想得太复杂,换个思路或者着手点可能会比较简单。