青训营X豆包AI工具的使用 | 豆包MarsCode AI 刷题

72 阅读4分钟

问题描述

小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提供代码思路,豆包分析题目,得知两个英雄只要一个等级高,另一个英雄就会升级,那么解题思路有了。

解题思路

  1. 排序:首先对英雄的等级进行排序。排序后,我们可以更容易地判断哪些英雄有潜力达到目标等级。
  2. 潜力判断:从等级最高的英雄开始,判断它是否能通过与其他英雄的历练达到目标等级。具体来说,如果一个英雄的等级比其他所有英雄的等级都高,那么它就有潜力达到目标等级。

代码思路

  1. 排序:对英雄的等级数组进行排序。
  2. 遍历:从等级最高的英雄开始,判断它是否能通过与其他英雄的历练达到目标等级。
  3. 计数:统计有潜力的英雄数量。

刚开始根据代码写代码,我遍历的里边的判断语句为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);
}

}

  1. 导入包

    • import java.util.HashSet;:导入HashSet类,用于存储唯一的英雄等级。
  2. 主类和主方法

    • public class HeroPotential:定义主类。
    • public static void main(String[] args):程序的入口,负责执行测试样例。
  3. potentialHeroes方法

    • 方法声明public static int potentialHeroes(int n, long[] u),传入参数 n(英雄数量)和 u(英雄等级数组),返回值为潜力英雄的数量。
  4. 存储唯一英雄等级

    • HashSet<Long> uniqueLevels = new HashSet<>();:创建一个HashSet来存储不同的英雄等级,以自动去重。
    • for (long level : u) { uniqueLevels.add(level); }:遍历传入的英雄等级数组,将每个等级添加到集合中。
  5. 目标等级检查

    • long targetLevel = 2000000000000000L;:定义目标等级。
    • for (long level : uniqueLevels) { if (level >= targetLevel) { return 0; } }:检查集合中是否有等级大于或等于目标等级。如果有,返回0表示没有英雄有潜力达到该等级。
  6. 寻找最高等级

    • long maxLevel = Long.MIN_VALUE;:初始化最高等级变量为最小值。
    • for (long level : uniqueLevels) { if (level > maxLevel) { maxLevel = level; } }:再次遍历集合,查找最大等级。
  7. 计算有潜力的英雄数量

    • int countCanPromote = 0;:初始化计数器,统计有潜力的英雄数量。
    • for (long level : uniqueLevels) { if (level < maxLevel) { countCanPromote++; } }:计算低于最高等级的等级数量,增加计数器。
  8. 返回结果

    • return countCanPromote;:返回能够通过历练达到目标等级的英雄数量。

代码解释

  1. 去重英雄等级:使用集合 unique_levels 以去重。
  2. 检查目标等级:如果已有英雄等级大于等于目标等级,直接返回0。
  3. 计算有潜力的英雄:找到最高等级,并计算低于最高等级的英雄数量,这些英雄都是有潜力通过历练达到目标等级的。

总结

这就是豆包AI的使用过程,我们可以让豆包提供代码思路,然后根据思路写代码,遇到问题可以让豆包进行审查,让后修改,以达到最终正确的目的。