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

144 阅读2分钟

问题描述

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

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


题目分析

最低等级的英雄无法从其他英雄的历练中提升,而其他等级均可以与更低等级的英雄历练(田忌赛马)。 故答案为最低等级的英雄数量


解题思路

  1. 排序

  2. 计算最低等级英雄数量


代码实现

import java.util.Arrays;

public class Main {
    public static int solution(int n, int[] u) {
        // 按等级排序
        Arrays.sort(u);
        
        // 若所有英雄等级相同,则没有英雄具备潜力
        if (u[0] == u[u.length - 1]) {
            return 0;
        }

        // 统计最低等级英雄的数量
        int count = 0;
        int minLevel = u[0];
        for (int level : u) {
            if (level == minLevel) {
                count++;
            } else {
                break; // 一旦遇到非最低等级英雄,停止计数
            }
        }

        // 有潜力的英雄数量 = 总英雄数量 - 最低等级英雄数量
        return n - count;
    }

    public static void main(String[] args) {
        // 示例测试
        System.out.println(solution(5, new int[]{1, 2, 3, 1, 2}) == 3); // 示例1
        System.out.println(solution(4, new int[]{100000, 100000, 100000, 100000}) == 0); // 示例2
        System.out.println(solution(6, new int[]{1, 1, 1, 2, 2, 2}) == 3); // 示例3
    }
}

复杂度分析

  1. 时间复杂度
    • 数组排序需要 O(nlog n)
    • 遍历数组统计最低等级英雄数量需要 O(n)
    • 总复杂度为 O(nlog n)
  2. 空间复杂度
    • 排序操作为原地排序,空间复杂度为 O(1)

边界条件

  • 如果所有英雄等级相同,则结果为 0,因为没有英雄能达到目标等级。