贪心猫的鱼干大分配-题解 | 豆包MarsCode AI 刷题

99 阅读2分钟

刷题笔记:贪心猫的鱼干大分配

一、问题分析

这个问题要求我们在满足每只猫至少得到一斤鱼干且等级高的猫比相邻等级低的猫得到更多鱼干的条件下,求出至少需要准备多少斤鱼干。

二、代码思路

  1. 初始化变量
    • 创建一个与猫的数量相同长度的列表 fish,用于存储每只猫分配到的鱼干数量,初始值都为 1,表示每只猫至少有一斤鱼干。
  2. 遍历猫的等级列表
    • 从左到右遍历猫的等级列表 cats_levels
    • 如果当前猫的等级比前一只猫高,那么当前猫的鱼干数量应该比前一只猫多,所以将当前猫的鱼干数量更新为前一只猫的鱼干数量加 1。
    • 继续从左到右遍历,如果当前猫的等级比后一只猫高,那么当前猫的鱼干数量应该比后一只猫多,再次更新当前猫的鱼干数量为后一只猫的鱼干数量加 1。
  3. 计算总鱼干数量
    • 遍历完所有猫的等级后,将 fish 列表中的所有鱼干数量相加,得到最终结果。

以下是使用 Python 实现的代码:

def min_fish(n, cats_levels):
    fish = [1] * n
    for i in range(n):
        if i > 0 and cats_levels[i] > cats_levels[i - 1]:
            fish[i] = fish[i - 1] + 1
    for i in range(n - 2, -1, -1):
        if cats_levels[i] > cats_levels[i + 1]:
            fish[i] = max(fish[i], fish[i + 1] + 1)
    return sum(fish)

三、心得总结

  1. 这道题主要考察了对贪心算法的理解和应用。通过从左到右和从右到左两次遍历,确保了每只猫的鱼干数量既满足比左边等级低的猫多,又满足比右边等级低的猫多,从而得到满足条件的最小鱼干数量。
  2. 在解决问题的过程中,需要仔细分析问题的条件和要求,找到合适的算法策略。贪心算法通常适用于求解最优解问题,在每一步都做出当前看来最优的选择,最终得到全局最优解。
  3. 代码实现时,要注意边界条件的处理。在本题中,需要考虑第一只猫和最后一只猫的特殊情况,确保算法的正确性。
  4. 通过这道题,加深了对贪心算法的理解和掌握,提高了分析问题和解决问题的能力。同时,也认识到在刷题过程中,要多思考不同的算法思路,选择最合适的方法来解决问题。