超市里的货物架调整问题解析
题目背景
在一个超市中,货物架包含 n 个格子,每个格子内有一种商品。商品由小写字母 a 到 z 表示。当顾客进入超市时,他们会从第一个格子开始查找自己想要购买的商品。顾客的需求顺序已知,如果顾客找到所需商品,就会购买并离开。如果中途遇到一个空格子,或者顾客遍历完所有格子仍未找到商品,他们也会离开。
在此问题中,作为超市管理员,我们可以在顾客进入之前对货架上的商品进行调整(但在顾客开始寻找商品后,商品位置不能再变动)。我们的目标是计算,在最优调整的情况下,最多可以售出多少件商品。
题目分析
-
输入:
n:货架格子数,代表商品数量。m:顾客想要购买的商品种类数。s:表示货架上的商品,长度为n的字符串。c:顾客想要购买的商品种类,长度为m的字符串。
-
输出:
- 最多能卖出多少件商品。
解题思路
为了最大化销售数量,我们应该优化商品的顺序,让顾客更容易找到他们想购买的商品。最优策略是把顾客需求中的商品尽量集中在货架的前面,减少商品的排列冲突,增加顾客找到商品的概率。
1. 统计商品数量
首先,我们需要统计货架上每种商品的数量以及顾客想购买的每种商品的数量。这可以通过使用 HashMap 来记录每种商品的数量。
shelfCount:记录货架上每种商品的数量。customerCount:记录顾客对每种商品的需求数量。
2. 比较需求和供应
对于每一种顾客需要的商品,我们检查货架上是否有足够的商品。如果顾客的需求量大于货架上该商品的数量,顾客能够购买的商品数量就等于货架上的数量;如果顾客的需求量小于或等于货架上的商品数量,顾客能够购买的商品数量就等于顾客的需求量。
最终,总的售出商品数等于每种商品的最小购买数量之和。
3. 结果输出
遍历顾客需求的每种商品,累加能够销售的商品数量,返回最终的结果。
代码如下
1. 统计商品数量
我们首先创建了两个 HashMap 来分别存储货架上商品的数量和顾客的需求数量:
shelfCount.put(item, shelfCount.getOrDefault(item, 0) + 1)用于统计货架上每种商品的数量。customerCount.put(item, customerCount.getOrDefault(item, 0) + 1)用于统计顾客想要购买的商品的数量。
2. 计算最优销售数量
在第二部分的代码中,我们遍历 customerCount 中的每一项(即顾客想购买的每种商品)。对于每一种商品,计算它能售出的数量。售出的数量为该商品在货架上的数量和顾客需求数量的最小值:totalSold += Math.min(demand, available);
总结
通过对货架商品顺序的优化调整,使得顾客能够更早找到他们想要的商品,从而提高了销售数量。通过使用 HashMap 来记录商品的数量和顾客的需求,能够高效地计算出最优的销售数量。