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

110 阅读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

样例3:

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

解答思路

  1. 理解游戏规则

    • 每天可以选择两个英雄进行历练。
    • 如果两个英雄的等级相同,等级不变。
    • 如果等级不同,等级较高的英雄升级,等级较低的英雄保持原等级。
  2. 确定目标

    • 至少有一个英雄达到2000000000000000级。
    • 计算有多少英雄有潜力通过历练机制达到极高水平。
  3. 分析潜力

    • 由于每次历练中,等级较高的英雄会升级,而等级较低的不会变,这意味着低等级的英雄会“促进”高等级英雄的成长速度。
    • 因此,拥有最低等级的英雄数量成为关键。如果存在至少一个等级最低的英雄,则其他英雄理论上都可以历练升级到目标等级。
  4. 算法设计

    • 找出数组u中的最小值(最低等级)及其出现的次数(minNum)。
    • 除了这些最低等级的英雄外,其余英雄理论上都有可能通过与其他非最低等级的英雄进行历练,逐渐提升等级,直至接近或达到目标等级。
    • 因此,有潜力的英雄数量等于总英雄数减去最低等级英雄的数量(u.length - minNum)。

方法实现

	public class Main {

	    public static int solution(int n, int[] u) {

	        if (n <= 1) {

	            // 如果只有一个英雄,则无法通过历练提升等级,返回0

	            return 0;

	        }

	        // 最小等级
	        long min = Long.MAX_VALUE;
                // 最小等级角色数量
	        int minNum = 0;

	        // 遍历数组u,找出最小等级及其出现次数

	        for (int i : u) {

	            if (i < min) {

	                min = i;

	                minNum = 1;

	            } else if (i == min) {

	                minNum++;

	            }

	        }

	        // 返回有潜力的英雄数量

	        return u.length - minNum;

	    }

	    public static void main(String[] args) {

	        // 测试样例

	        System.out.println(solution(5, new int[] { 1, 2, 3, 1, 2 }) == 3); // 输出3

	        System.out.println(solution(4, new int[] { 100000, 100000, 100000, 100000 }) == 0); // 输出0

	        System.out.println(solution(6, new int[] { 1, 1, 1, 2, 2, 2 }) == 3); // 输出3

	    }

	}

代码分析

  • 初始化:首先检查英雄总数n,如果n小于等于1,则直接返回0,因为没有其他英雄可以与之历练。
  • 寻找最小值:通过遍历数组u,找出最小等级min及其出现次数minNum
  • 计算潜力英雄数量:根据游戏规则,最低等级的英雄的存在可以使得其他英雄升级,因此有潜力的英雄数量等于总英雄数减去最低等级英雄的数量。

总结

本题通过考察游戏规则和逻辑推理,设计了一个简单的算法来评估英雄升级的潜力。该算法的关键在于识别出最低等级的英雄数量,这是限制其他英雄升级速度的关键因素。通过计算非最低等级英雄的数量,我们能够得出有潜力达到极高等级的英雄数量。这种方法不仅高效,而且易于理解和实现,是解决此类问题的有效策略。