题目描述
在猫星球上,小R负责给一行排队的猫分发鱼干。每只猫有一个等级,等级越高的猫应该得到更多的鱼干。规则如下:
- 每只猫至少得到一斤鱼干。
- 如果一只猫的等级高于它相邻的猫,它就应该得到比相邻的猫更多的鱼干。
小R想知道,为了公平地满足所有猫的等级差异,他至少需要准备多少斤鱼干。
解题思路
1.初始化:初始化一个数组,保证每只猫至少得到一斤鱼干。
2.正向遍历:从左往右遍历并更新以上数组,保证每只猫得到的鱼干满足条件。
3.反向遍历:从右往左遍历并更新数组,保证每只猫得到的鱼干数目满足条件。
4.返回结果:统计鱼干总数并返回结果。
代码实现
def solution(n, cats_levels):
# 初始化每只猫至少得到一斤鱼干
fish_amounts = [1] * n
# 从左到右遍历,确保每只猫的鱼干数量满足条件
for i in range(1, n):
if cats_levels[i] > cats_levels[i - 1]:
fish_amounts[i] = fish_amounts[i - 1] + 1
# 从右到左遍历,确保每只猫的鱼干数量满足条件
for i in range(n - 2, -1, -1):
if cats_levels[i] > cats_levels[i + 1]:
fish_amounts[i] = max(fish_amounts[i], fish_amounts[i + 1] + 1)
# 计算总鱼干数量
total_fish = sum(fish_amounts)
return total_fish
if __name__ == "__main__":
# You can add more test cases here
cats_levels1 = [1, 2, 2]
cats_levels2 = [6, 5, 4, 3, 2, 16]
cats_levels3 = [1, 2, 2, 3, 3, 20, 1, 2, 3, 3, 2, 1, 5, 6, 6, 5, 5, 7, 7, 4]
print(solution(3, cats_levels1) == 4)
print(solution(6, cats_levels2) == 17)
print(solution(20, cats_levels3) == 35)
代码详解
1.初始化数组:初始化fish_amounts列表,包含n个元素每个元素初始值为1,用于记录每只猫分配得到的鱼干数目。
2.正向遍历:从左往右遍历每只猫的等级,若第i只猫等级高于第i-1只猫,则fish_amounts[i] = fish_amounts[i-1] + 1。
3.反向遍历:从右往左遍历每只猫的等级,若第i只猫等级高于第i+1只猫,则fish_amounts[i] = max(fish_amounts[i], fish_amounts[i + 1] + 1)。
4.返回结果:利用sum()返回fish_amounts的和。
工具运用
在MarsCode AI刷题过程中,使用MarsCode AI工具能够有效理解题目并收获知识,提升编程能力:
1.在题目的解读不清楚,没有思路时,利用AI工具提供解题思路,可以反思自己为何没有想到对应的切入点,并提高自己的思维能力。
2.代码实现后,测试结果出错,但自己无法发现问题所在,可以利用AI工具检查自己的代码,帮助自己查找问题,在此基础上我们可以发现自己的不足并提升自己的能力。