在这篇伴学笔记中,我想对使用豆包MarsCode AI刷题平台的几个功能进行总结与整理。 下面我将用一道具体的算法题进行举例说明。 选用的题目为64.英雄决斗的最大胜利次数
问题描述
小U和小F正在进行一场由 nn 轮组成的英雄决斗比赛。在每一轮中,小U和小F各自从他们的英雄队伍中选出一位英雄进行对决,英雄的能力值将决定比赛的胜负,能力值高者获胜。小U已经按照固定的能力顺序 1,2,3,…,n1,2,3,…,n 安排了他的英雄出场顺序。
小F希望通过调整他的英雄出场顺序,最大化他的获胜轮数。请帮助小 F 确定一个最佳的出场顺序,以获得最多的胜利。
输入说明
number: 一个整数,表示比赛的总轮数 nn。heroes: 一个长度为 nn 的正整数数组,表示小 F 的每个英雄的能力值。
输出
- 返回一个整数,表示小 F 可以获得的最大胜利轮数。
测试样例
样例1:
输入:
number = 7, heroes = [10, 1, 1, 1, 5, 5, 3]
输出:4
样例2:
输入:
number = 5, heroes = [1, 1, 1, 1, 1]
输出:0
样例3:
输入:
number = 6, heroes = [9, 4, 7, 3, 2, 6]
输出:6
看到这一样一道题目我们要是毫无思路可以先用豆包的AI思路提示功能先给自己一个初步的思路方向,然后说顺着这个思路方向我们可以自己接着去完善 下面我们看看豆包给我们的思路提示
问题理解
小U的英雄出场顺序是固定的,能力值为 1, 2, 3, ..., n。小F需要通过调整他的英雄出场顺序,最大化他的获胜轮数。
数据结构选择
- 小F的英雄能力值数组
heroes需要进行排序,以便我们可以更方便地进行匹配。
算法步骤
-
排序:首先对小F的英雄能力值数组
heroes进行升序排序。 -
双指针法:使用两个指针
i和j,分别指向小U和小F的英雄。i从小U的英雄能力值1开始,逐步增加。j从小F的英雄能力值数组的最小值开始,逐步增加。
-
匹配策略:
- 如果小F的英雄能力值
heroes[j]大于小U的英雄能力值i,则小F获胜,victories计数加1,两个指针都向前移动。 - 如果小F的英雄能力值
heroes[j]小于或等于小U的英雄能力值i,则小F的英雄无法获胜,j指针向前移动,尝试用更强的英雄来匹配。
- 如果小F的英雄能力值
关键点
- 通过排序和双指针法,可以有效地找到小F的最佳出场顺序,从而最大化获胜轮数。
到这一步我们便可以自己开始动手开始写代码了、当然有些新手代码能力偏弱。可以让豆包给你一些代码提示。豆包不会给你完整的代码。但会给你一个代码框架。你在这个代码框架下面写会很容易完成题目。不至于一道题目卡半天。
下面我们看看豆包给的代码提示
代码提示
def solution(number, heroes):
# 小F的英雄按能力升序排列
heroes.sort()
# 双指针初始化
i, j = 0, 0
victories = 0
# 按顺序遍历小U的英雄
while i < number and j < number:
if heroes[j] > i + 1:
# 如果小F的英雄能战胜小U的英雄
victories += 1
j += 1
i += 1
else:
# 如果不能胜过,那么小F本轮派出最弱的以策略性放弃
j += 1
return victories
if __name__ == "__main__":
# You can add more test cases here
print(solution(7, [10,1,1,1,5,5,3]) == 4 )
print(solution(5, [1,1,1,1,1]) == 0 )
print(solution(10, [1,2,3,4,5,6,7,8,9,10]) == 9 )
关键步骤提示
-
排序:
- 你已经正确地对
heroes数组进行了排序。
- 你已经正确地对
-
双指针法:
i指针表示小U的英雄能力值,从1开始,逐步增加。j指针表示小F的英雄能力值,从排序后的heroes数组的最小值开始,逐步增加。
-
匹配策略:
- 如果
heroes[j] > i + 1,表示小F的英雄能战胜小U的英雄,victories计数加1,两个指针都向前移动。 - 如果
heroes[j] <= i + 1,表示小F的英雄无法获胜,j指针向前移动,尝试用更强的英雄来匹配。
- 如果
代码优化提示
- 你可以考虑在
while循环中增加一些边界条件的检查,以确保代码的健壮性。 - 你可以尝试在
if语句中增加一些调试信息,以便更好地理解代码的执行过程。 豆包不仅会给代码提示还会同时给文字分析,极大帮助了新手学习。 通过以上提示我们很快就掌握了这个题目的意思。并写出了代码。这样写代码是不是效率很高。很开心
完整代码
def solution(number, heroes):
# 小F的英雄按能力升序排列
heroes.sort()
# 双指针初始化
i, j = 0, 0
victories = 0
# 按顺序遍历小U的英雄
while i < number and j < number:
if heroes[j] > i + 1:
# 如果小F的英雄能战胜小U的英雄
victories += 1
j += 1
i += 1
else:
# 如果不能胜过,那么小F本轮派出最弱的以策略性放弃
j += 1
return victories
if __name__ == "__main__":
# You can add more test cases here
print(solution(7, [10,1,1,1,5,5,3]) == 4 )
print(solution(5, [1,1,1,1,1]) == 0 )
print(solution(10, [1,2,3,4,5,6,7,8,9,10]) == 9 )
总结
通过豆包MarsCode AI刷题平台,我们可以看到AI刷题的强大之处,它不仅向我们提供思路提示,更给我们提供代码框架,我们需要做的就是往框架里面填写代码并添加一些自己的思考,这极大程度地提高了我们编写代码的效率,同时也拓宽了我们编写代码的思路。跟随AI刷题的步伐,我们的写代码的能力也会越来越强。豆包MarsCode AI刷题工具通过精选真题与个性化推荐功能,帮助我高效地掌握了复杂的算法知识,也提升了我的自学能力,是我学习过程中的得力助手。