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

133 阅读3分钟

题描述

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

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

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

测试样例

样例1:

输入:n = 3 ,m = 4 ,s = "abc" ,c = "abcd"
输出:3

样例2:

输入:n = 4 ,m = 2 ,s = "abbc" ,c = "bb"
输出:2

样例3:

输入:n = 5 ,m = 4 ,s = "bcdea" ,c = "abcd"
输出:4

    

    # 遍历排好序的需求产品列表

    for product, quantity in sorted_demand:

        # 根据每种产品的需求量进行销售

        for _ in range(quantity):

            # 检查货架是否还有空位

            if shelf_index < n:

                sales += 1  # 增加销售计数

                shelf_index += 1  # 移动到下一个货架位置

            else:

                break  # 如果货架已满,则停止销售

                

    return sales  # 返回总销售量

3

def solution(n: int, m: int, s: str, c: str) -> int:

from collections import Counter

def solution(n: int, m: int, s: str, c: str) -> int: # 统计产品的库存数量 product_count = Counter(s) # 统计客户对不同产品的需求数量 customer_count = Counter(c)

# 计算每种产品的实际需求量,取客户需求和库存数量的较小值
demand = {product: min(customer_count[product], product_count[product]) for product in customer_count}

# 按照需求量从大到小排序,生成一个元组列表
sorted_demand = sorted(demand.items(), key=lambda x: x[1], reverse=True)
sales = 0  # 记录实际销售量
shelf_index = 0  # 当前货架上销售的产品位置索引

# 遍历排好序的需求产品列表
for product, quantity in sorted_demand:
    # 根据每种产品的需求量进行销售
    for _ in range(quantity):
        # 检查货架是否还有空位
        if shelf_index < n:
            sales += 1  # 增加销售计数
            shelf_index += 1  # 移动到下一个货架位置
        else:
            break  # 如果货架已满,则停止销售
            
return sales  # 返回总销售量
### 算法解析

问题理解

我们需要在一个超市的货物架上重新排列商品,以便在顾客到来时能够尽可能多地卖出商品。每个顾客只会购买他们想要的商品中的一种,并且一旦找到就会离开。我们需要计算在最优调整下,最多可以卖出多少件商品。

数据结构选择

  1. Counter:用于统计货架上每种商品的数量以及顾客对每种商品的需求量。
  2. 字典:用于存储每种商品的实际需求量(即顾客需求量和库存量的较小值)。
  3. 列表:用于存储按需求量排序后的商品及其需求量。

算法步骤

  1. 统计库存和需求

    • 使用 Counter 统计货架上每种商品的数量。
    • 使用 Counter 统计顾客对每种商品的需求量。
  2. 计算实际需求量

    • 对于每种商品,计算其实际需求量,即顾客需求量和库存量的较小值。
  3. 排序需求

    • 将商品按实际需求量从大到小排序,生成一个元组列表。
  4. 模拟销售过程

    • 遍历排序后的需求列表,依次销售商品。
    • 每销售一件商品,增加销售计数,并移动到下一个货架位置。
    • 如果货架已满(即所有格子都已使用),则停止销售。
  5. 返回结果

    • 返回总销售量。