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

51 阅读3分钟

问题描述

在猫星球上,小R负责给一行排队的猫分发鱼干。每只猫有一个等级,等级越高的猫应该得到更多的鱼干。规则如下:

  1. 每只猫至少得到一斤鱼干。
  2. 如果一只猫的等级高于它相邻的猫,它就应该得到比相邻的猫更多的鱼干。

小R想知道,为了公平地满足所有猫的等级差异,他至少需要准备多少斤鱼干。


测试样例

样例1:

输入:n = 3, cats_levels = [1, 2, 2]
输出:4

样例2:

输入:n = 6, cats_levels = [6, 5, 4, 3, 2, 16]
输出:17

样例3:

输入:n = 20, cats_levels = [1, 2, 2, 3, 3, 20, 1, 2, 3, 3, 2, 1, 5, 6, 6, 5, 5, 7, 7, 4]
输出:35

解题思路

  1. 初始分配:每只猫至少得到一斤鱼干。
  2. 调整分配:从左到右遍历,确保每只猫的鱼干数满足等级要求。

代码提示

我们可以使用一个数组 fish 来记录每只猫的鱼干数。初始时,每只猫都分配一斤鱼干。然后,我们遍历 cats_levels 数组,调整鱼干数以满足等级要求。 def solution(n, cats_levels): # 初始化每只猫的鱼干数为1 fish = [1] * n

# 从左到右遍历,确保每只猫的鱼干数满足等级要求
for i in range(1, n):
    if 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)

if name == "main": # 测试用例 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. 初始化:每只猫初始鱼干数为1。
  2. 从左到右遍历:确保每只猫的鱼干数满足等级要求。
  3. 从右到左遍历:再次确保每只猫的鱼干数满足等级要求。
  4. 返回总鱼干数:计算并返回所有猫的鱼干总数。

解题思路;如何处理等级相同的猫

  1. 初始分配:每只猫至少得到一斤鱼干。
  2. 调整分配:从左到右遍历,确保每只猫的鱼干数满足等级要求。
  3. 处理相同等级:在从左到右和从右到左的遍历中,确保相同等级的猫的鱼干数不会被过度增加。

关键步骤

  1. 初始化:每只猫初始鱼干数为1。
  2. 从左到右遍历:确保每只猫的鱼干数满足等级要求。如果等级相同,保持鱼干数不变。
  3. 从右到左遍历:再次确保每只猫的鱼干数满足等级要求。如果等级相同,保持鱼干数不变。
  4. 返回总鱼干数:计算并返回所有猫的鱼干总数。