伴学笔记 AI刷题 9.超市里的货物架调整 | 豆包MarsCode AI刷题

最近在参加豆包的AI刷题活动,深感慨如今AI的解题能力这么强了,不过可能还是会有些小细节有问题,这里将对一些问题做出解析。

先来看看这道题

9.超市里的货物架调整

问题描述

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

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

  • 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

首先进行问题分析

问题分析

首先,我们需要理解题目的核心要求。题目中给出了几个关键信息:

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

我们的目标是重新安排商品顺序,使得顾客在查找过程中尽可能早地找到他们想要购买的商品。这意味着我们应该将顾客需求量大的商品放在前面。

关键思路

  1. 统计商品频率:首先,我们需要统计货物架上每种商品的频率,以及顾客想要购买的商品的频率。
  2. 排序商品:根据顾客的需求量,对商品进行排序。需求量大的商品应该排在前面。
  3. 计算最大销售量:按照排序后的商品顺序,计算最大销售量。对于每种商品,我们取其在货物架上的数量和顾客需求量中的较小值,然后累加到销售量中。

代码实现

  1. 统计商品频率
python 复制代码
product_count = {}
for char in s:
    product_count[char] = product_count.get(char, 0) + 1

demand_count = {}
for char in c:
    demand_count[char] = demand_count.get(char, 0) + 1

这里,我们使用 Python 字典来统计每种商品的频率。product_count 存储货物架上每种商品的频率,而 demand_count 存储顾客想要购买的商品的频率。

  1. 按需求量排序商品
python 复制代码
sorted_products = sorted(products, key=lambda x: demand_count.get(x, 0), reverse=True)

这里,我们使用 Python 的 sorted 函数和一个 lambda 函数来根据顾客的需求量对商品进行排序。reverse=True 参数确保需求量大的商品排在前面。

  1. 计算最大销售量
python 复制代码
sold = 0
for product in sorted_products:
    if product in demand_count:
        sold += min(product_count[product], demand_count[product])
        del demand_count[product]

这里,我们遍历排序后的商品列表,并更新销售量。对于每种商品,我们取其在货物架上的数量和顾客需求量中的较小值,然后累加到销售量中。如果某种商品在货物架上的数量大于顾客的需求量,我们只需要考虑顾客的需求量。如果某种商品在货物架上的数量小于或等于顾客的需求量,我们需要考虑商品在货物架上的数量。

完整代码

python 复制代码
def solution(n: int, m: int, s: str, c: str) -> int:
    # 统计每个商品的频率
    product_count = {}
    for char in s:
        product_count[char] = product_count.get(char, 0) + 1

    # 统计顾客需求的商品频率
    demand_count = {}
    for char in c:
        demand_count[char] = demand_count.get(char, 0) + 1

    # 获取所有商品的键
    products = list(product_count.keys())

    # 按需求量从高到低排序商品
    sorted_products = sorted(products, key=lambda x: demand_count.get(x, 0), reverse=True)

    # 计算最大销售量
    sold = 0
    for product in sorted_products:
        if product in demand_count:
            sold += min(product_count[product], demand_count[product])
            del demand_count[product]

    return sold

总结分析

这个超市货物架商品排序问题的算法具有线性时间复杂度 O(n + m) 和常数空间复杂度 O(1)。这意味着算法的效率很高,适用于处理大量数据的情况。

相关推荐
Find4 天前
MaxKB 集成langchain + Vue + PostgreSQL 的 本地大模型+本地知识库 构建私有大模型 | MarsCode AI刷题
青训营笔记
理tan王子4 天前
伴学笔记 AI刷题 14.数组元素之和最小化 | 豆包MarsCode AI刷题
青训营笔记
理tan王子4 天前
伴学笔记 AI刷题 25.DNA序列编辑距离 | 豆包MarsCode AI刷题
青训营笔记
夭要7夜宵6 天前
分而治之,主题分片Partition | 豆包MarsCode AI刷题
青训营笔记
三六7 天前
刷题漫漫路(二)| 豆包MarsCode AI刷题
青训营笔记
tabzzz8 天前
突破Zustand的局限性:与React ContentAPI搭配使用
前端·青训营笔记
Serendipity5659 天前
Go 语言入门指南——单元测试 | 豆包MarsCode AI刷题;
青训营笔记
wml11 天前
前端实践-使用React实现简单代办事项列表 | 豆包MarsCode AI刷题
青训营笔记
用户447103089324212 天前
详解前端框架中的设计模式 | 豆包MarsCode AI刷题
青训营笔记