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

76 阅读3分钟

问题描述

在一个超市里,有一个包含 nn 个格子的货物架,每个格子中放有一种商品,商品用小写字母 a 到 z 表示。当顾客进入超市时,他们会依次从第一个格子查找到第 nn 个格子,寻找自己想要购买的商品。如果在某个格子中找到该商品,顾客就会购买它并离开;如果中途遇到一个空格子,或查找完所有格子还没有找到想要的商品,顾客也会离开。

作为超市管理员,你可以在顾客到来之前重新调整商品的顺序,以便尽可能多地出售商品。当第一个顾客进入后,商品位置不能再调整。你需要计算在最优调整下,最多可以卖出多少件商品。输入变量说明:

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

思路分析

数据结构选择

  1. 商品频率统计:首先,我们需要统计每个商品在货架上的出现频率。这可以帮助我们了解哪些商品可以被优先放置在前面。
  2. 顾客需求统计:其次,我们需要统计每个顾客想要的商品种类。这可以帮助我们了解哪些商品是最受欢迎的。

算法步骤

  1. 统计商品频率:遍历货架上的商品,统计每个商品的出现次数。
  2. 统计顾客需求:遍历顾客想要的商品种类,统计每个商品的需求次数。
  3. 优先级排序:根据商品的需求次数和出现频率,确定商品的优先级。需求次数高的商品优先级高,需求次数相同的情况下,出现频率高的商品优先级高。
  4. 重新排列货架:根据优先级重新排列货架上的商品。
  5. 计算最大销售量:根据重新排列后的货架,计算最多可以卖出多少件商品。

代码实现

python代码

def solution(n: int, m: int, s: str, c: str) -> int:
    # 统计每个商品在货架上的出现频率
    from collections import Counter
    shelf_count = Counter(s)
    
    # 统计每个顾客想要的商品种类
    customer_count = Counter(c)
    
    # 根据商品的需求次数和出现频率,确定商品的优先级
    # 需求次数高的商品优先级高,需求次数相同的情况下,出现频率高的商品优先级高
    priority = sorted(shelf_count.keys(), key=lambda x: (customer_count[x], shelf_count[x]), reverse=True)
    
    # 重新排列货架上的商品
    rearranged_shelf = ''.join([x * shelf_count[x] for x in priority])
    
    # 计算最大销售量
    sold = 0
    for item in c:
        if item in rearranged_shelf:
            sold += 1
            # 移除已经卖出的商品
            rearranged_shelf = rearranged_shelf.replace(item, '', 1)
    
    return sold

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

关键步骤解释

  1. 统计商品频率:使用 Counter 统计货架上每个商品的出现频率。
  2. 统计顾客需求:使用 Counter 统计每个顾客想要的商品种类。
  3. 优先级排序:根据商品的需求次数和出现频率,使用 sorted 函数进行排序。
  4. 重新排列货架:根据优先级重新排列货架上的商品。
  5. 计算最大销售量:遍历顾客想要的商品种类,计算最多可以卖出多少件商品。

总结

通过运用智能刷题工具——豆包MarsCode AI,我在知识吸收、逻辑思维和创新实践能力方面取得了显著的提升。展望未来,我将继续整合AI的先进技术与优秀教育资源,一方面巩固和拓宽学科知识,另一方面大胆涉猎更深层次的知识领域,以实现个人学习水平的全面提升。在这个过程中,我坚信自己将不断超越自我,攀登更高的学习高峰。