问题描述
在一个超市里,有一个包含 nn 个格子的货物架,每个格子中放有一种商品,商品用小写字母 a 到 z 表示。当顾客进入超市时,他们会依次从第一个格子查找到第 nn 个格子,寻找自己想要购买的商品。如果在某个格子中找到该商品,顾客就会购买它并离开;如果中途遇到一个空格子,或查找完所有格子还没有找到想要的商品,顾客也会离开。
作为超市管理员,你可以在顾客到来之前重新调整商品的顺序,以便尽可能多地出售商品。当第一个顾客进入后,商品位置不能再调整。你需要计算在最优调整下,最多可以卖出多少件商品。输入变量说明:
n:货物架的格子数m:顾客想要购买的商品种类数s:货物架上商品的初始顺序c:顾客想要购买的商品种类
思路分析
数据结构选择
- 商品频率统计:首先,我们需要统计每个商品在货架上的出现频率。这可以帮助我们了解哪些商品可以被优先放置在前面。
- 顾客需求统计:其次,我们需要统计每个顾客想要的商品种类。这可以帮助我们了解哪些商品是最受欢迎的。
算法步骤
- 统计商品频率:遍历货架上的商品,统计每个商品的出现次数。
- 统计顾客需求:遍历顾客想要的商品种类,统计每个商品的需求次数。
- 优先级排序:根据商品的需求次数和出现频率,确定商品的优先级。需求次数高的商品优先级高,需求次数相同的情况下,出现频率高的商品优先级高。
- 重新排列货架:根据优先级重新排列货架上的商品。
- 计算最大销售量:根据重新排列后的货架,计算最多可以卖出多少件商品。
代码实现
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)
关键步骤解释
- 统计商品频率:使用
Counter统计货架上每个商品的出现频率。 - 统计顾客需求:使用
Counter统计每个顾客想要的商品种类。 - 优先级排序:根据商品的需求次数和出现频率,使用
sorted函数进行排序。 - 重新排列货架:根据优先级重新排列货架上的商品。
- 计算最大销售量:遍历顾客想要的商品种类,计算最多可以卖出多少件商品。
总结
通过运用智能刷题工具——豆包MarsCode AI,我在知识吸收、逻辑思维和创新实践能力方面取得了显著的提升。展望未来,我将继续整合AI的先进技术与优秀教育资源,一方面巩固和拓宽学科知识,另一方面大胆涉猎更深层次的知识领域,以实现个人学习水平的全面提升。在这个过程中,我坚信自己将不断超越自我,攀登更高的学习高峰。