问题描述
小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
通过这道题简单讲述一下豆包AI的使用。这道题刚开起来还比较懵,可以让豆包AI提供代码思路,豆包分析题目,得知两个英雄只要一个等级高,另一个英雄就会升级,那么解题思路有了。
解题思路
- 排序:首先对英雄的等级进行排序。排序后,我们可以更容易地判断哪些英雄有潜力达到目标等级。
- 潜力判断:从等级最高的英雄开始,判断它是否能通过与其他英雄的历练达到目标等级。具体来说,如果一个英雄的等级比其他所有英雄的等级都高,那么它就有潜力达到目标等级。
代码思路
- 排序:对英雄的等级数组进行排序。
- 遍历:从等级最高的英雄开始,判断它是否能通过与其他英雄的历练达到目标等级。
- 计数:统计有潜力的英雄数量。
刚开始根据代码写代码,我遍历的里边的判断语句为u[i]> u[i-1],但发现这样得不到正确答案,后来让豆包AI检查代码块。其实只需要让u[i]和最小的u[0]比较,就可以得到正确答案。
代码如下
`import java.util.Arrays;
public class Main { public static int solution(int n, int[] u) { // write code here Arrays.sort(u); int count = 0; for (int i = n - 1; i > 0 ; i--){ if (u[i] > u[0]){ count++; } } return count; }`
public static void main(String[] args) {
System.out.println(solution(5, new int[]{1, 2, 3, 1, 2}) == 3);
System.out.println(solution(4, new int[]{100000, 100000, 100000, 100000}) == 0);
System.out.println(solution(6, new int[]{1, 1, 1, 2, 2, 2}) == 3);
}
}
-
导入包:
import java.util.HashSet;:导入HashSet类,用于存储唯一的英雄等级。
-
主类和主方法:
public class HeroPotential:定义主类。public static void main(String[] args):程序的入口,负责执行测试样例。
-
potentialHeroes方法:
- 方法声明:
public static int potentialHeroes(int n, long[] u),传入参数n(英雄数量)和u(英雄等级数组),返回值为潜力英雄的数量。
- 方法声明:
-
存储唯一英雄等级:
HashSet<Long> uniqueLevels = new HashSet<>();:创建一个HashSet来存储不同的英雄等级,以自动去重。for (long level : u) { uniqueLevels.add(level); }:遍历传入的英雄等级数组,将每个等级添加到集合中。
-
目标等级检查:
long targetLevel = 2000000000000000L;:定义目标等级。for (long level : uniqueLevels) { if (level >= targetLevel) { return 0; } }:检查集合中是否有等级大于或等于目标等级。如果有,返回0表示没有英雄有潜力达到该等级。
-
寻找最高等级:
long maxLevel = Long.MIN_VALUE;:初始化最高等级变量为最小值。for (long level : uniqueLevels) { if (level > maxLevel) { maxLevel = level; } }:再次遍历集合,查找最大等级。
-
计算有潜力的英雄数量:
int countCanPromote = 0;:初始化计数器,统计有潜力的英雄数量。for (long level : uniqueLevels) { if (level < maxLevel) { countCanPromote++; } }:计算低于最高等级的等级数量,增加计数器。
-
返回结果:
return countCanPromote;:返回能够通过历练达到目标等级的英雄数量。
代码解释
- 去重英雄等级:使用集合
unique_levels以去重。 - 检查目标等级:如果已有英雄等级大于等于目标等级,直接返回0。
- 计算有潜力的英雄:找到最高等级,并计算低于最高等级的英雄数量,这些英雄都是有潜力通过历练达到目标等级的。
总结
这就是豆包AI的使用过程,我们可以让豆包提供代码思路,然后根据思路写代码,遇到问题可以让豆包进行审查,让后修改,以达到最终正确的目的。