解题思路
-
理解问题:
- 每只猫至少得到一斤鱼干。
- 如果一只猫的等级高于它相邻的猫,它应该得到比相邻的猫更多的鱼干。
-
数据结构选择:
- 我们可以使用一个数组
fish_amounts来记录每只猫得到的鱼干数量。
- 我们可以使用一个数组
-
算法步骤:
- 初始化
fish_amounts数组,每只猫至少得到一斤鱼干。 - 遍历
cats_levels数组,检查每只猫的等级是否高于相邻的猫。 - 如果当前猫的等级高于前一只猫,则当前猫的鱼干数量应比前一只猫多一斤。
- 如果当前猫的等级高于后一只猫,则当前猫的鱼干数量应比后一只猫多一斤。
- 最后,计算
fish_amounts数组中所有鱼干数量的总和。
- 初始化
伪代码框架
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
代码解释
-
初始化:
fish_amounts数组初始化为[1, 1, 1, ..., 1],表示每只猫至少得到一斤鱼干。
-
从左到右遍历:
- 如果当前猫的等级高于前一只猫,则当前猫的鱼干数量应比前一只猫多一斤。
-
从右到左遍历:
- 如果当前猫的等级高于后一只猫,则当前猫的鱼干数量应比后一只猫多一斤。
-
计算总鱼干数量:
- 最后,计算
fish_amounts数组中所有鱼干数量的总和。
- 最后,计算