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

105 阅读3分钟

超市里的货物价调整:

问题描述:

在一个超市里,有一个包含n个格子的货物架,每个格子中放有一种商品,商品用小写字母a到z表示。当顾客进入超市时,他们会依次从第一个格子查找到第n个格子,寻找自己想要购买的商品。如果在某个格子中找到该商品,顾客就会购买它并离开。如果中途遇到一个空格子,或查找完所有格子还没有找到想要的商品,顾客也会离开。作为超市管理员,你可以在顾客到来之前重新调整商品的顺序,以便尽可能多地出售商品。当第一个顾客进入后,商品位置不能再调整,你需要计算在最优调整下,最多可以卖出多少件商品。

输入变量说明:

  • n:货物架的格子数
  • m:顾客想要购买的商品种类数
  • s:货物架上商品的初始顺序
  • c:顾客想要购买的商品种类

问题分析:

我们的目标是通过重新排列货架上的商品,使得尽可能多的顾客能够找到他们想要的商品。使得尽可能多的顾客能够找到他们想要的商品:看到这句话我就再想这道题是不是用贪心来做,即每一步都实现当前局部最优解:

代码如下:

# 超市里的货物价调整
def solution(n: int, m: int, s: str, c: str) -> int:
    from collections import Counter
    demand_count = Counter(c)
    
    sold_count = 0
    for item in s:
        if item in demand_count and demand_count[item] > 0:
            sold_count += 1
            demand_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) 

复杂度分析

  • 时间复杂度:O(n + m),其中 n 是货架上的商品数量,m 是顾客想要的商品种类数量。
  • 空间复杂度:O(m),用于存储顾客需求的字典。

解决思路

  1. 记录顾客需求:首先,我们需要知道顾客想要购买哪些商品,以及每种商品的数量。
  2. 遍历货架:然后,我们需要检查货架上的商品,看看顾客想要的商品是否在上面。
  3. 计算满足的顾客数量:每当我们找到一个顾客想要的商品,就可以认为这个顾客得到了他们想要的商品,并且我们要减少这个商品的需求数量。

步骤详解

  1. 统计需求:我们用一个字典来记录顾客想要的每种商品和他们想要的数量。例如,如果顾客想要 "a" 两个,"b" 一个,我们就记录为 {'a': 2, 'b': 1}
  2. 检查货架:然后我们查看货架上的商品。如果我们看到一个商品是顾客想要的,并且需求数量还没满足,我们就可以说这个顾客找到了他们想要的商品,并且我们把这个商品的需求数量减一。
  3. 返回结果:最后,我们计算有多少个顾客的需求得到了满足,并返回这个数字。