超市里的货物架调整 | 豆包MarsCode AI刷题

59 阅读3分钟

题目

1732277671370.png

代码实现

def solution(n: int, m: int, s: str, c: str) -> int:
    # write code here
    shelf_count = {}
    for item in s:
        if item in shelf_count:
            shelf_count[item] += 1
        else:
            shelf_count[item] = 1
            
    # 统计最多可以卖出的商品数量
    sold_count = 0
    for item in c:
        if item in shelf_count and shelf_count[item] > 0:
            sold_count += 1
            shelf_count[item] -= 1  # 减少库存
            
    return sold_count

if __name__ == '__main__':
    print(solution(3, 4, "abc", "abcd") == 3)
    print(solution(4, 2, "abbc", "bb") == 2)
    print(solution(5, 4, "bcdea", "abcd") == 4)

问题背景

在一个超市中,货架上有多个格子,每个格子放置一种商品,商品用小写字母 az 表示。顾客进入超市后会依次从第一个格子查找到最后一个格子,寻找他们想要购买的商品。如果在某个格子中找到商品,顾客就会购买并离开;如果中途遇到空格子或者查找完所有格子仍未找到商品,顾客也会离开。

作为超市管理员,你可以在顾客到来之前重新调整商品的顺序,以便尽可能多地出售商品。一旦第一个顾客进入超市,商品的位置就不能再调整。你的任务是计算在最优调整下,最多可以卖出多少件商品。

解决方案

为了最大化卖出的商品数量,我们需要确保顾客能够尽可能多地找到他们想要的商品。具体来说,我们可以通过以下步骤来实现这一目标:

  1. 统计货架上的商品数量:首先,我们需要统计货架上每种商品的数量,以便知道每种商品的库存情况。
  2. 计算最多可以卖出的商品数量:接下来,我们遍历顾客想要购买的商品列表,检查每种商品在货架上的库存情况。如果货架上有该商品且库存大于0,我们就增加已售出商品的数量,并减少该商品的库存。

详细步骤

  1. 初始化货架商品统计表

    • 创建一个字典 shelf_count,用于记录每种商品的数量。
    • 遍历字符串 s,统计每种商品的数量并存入 shelf_count
  2. 计算最多可以卖出的商品数量

    • 初始化一个变量 sold_count,用于记录已售出的商品数量。

    • 遍历字符串 c,对于每个顾客想要购买的商品:

      • 如果该商品在 shelf_count 中存在且库存大于0,增加 sold_count 并减少该商品的库存。
  3. 返回结果

    • 返回 sold_count,即最多可以卖出的商品数量

总结与反思

通过上述方法,我们能够有效地计算在最优调整下最多可以卖出的商品数量。这种方法的时间复杂度为 O(n+m),其中 n 是货架上的格子数,m 是顾客想要购买的商品种类数。这是因为我们需要遍历货架上的商品来统计库存,然后再遍历顾客想要购买的商品列表来计算可以卖出的商品数量。

这种方法不仅简单易懂,而且效率高,适用于大多数实际场景。在解决类似问题时,关键在于合理利用数据结构(如字典)来提高算法的效率。