超市里的货物架调整(算法解析)|豆包MarsCode AI刷题

超市里的货物架调整

问题描述

在一个超市里,有一个包含 n 个格子的货物架,每个格子中放有一种商品,商品用小写字母 az 表示。当顾客进入超市时,他们会依次从第一个格子查找到第 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

问题理解

我们需要在顾客到来之前重新调整商品的顺序,以便尽可能多地出售商品。具体来说,我们需要计算在最优调整下,最多可以卖出多少件商品。

数据结构选择

  1. 货架商品统计

    • 使用一个长度为26的数组 stock,其中 stock[i] 表示字母 'a' + i 在货架上的出现次数。
    • 这样可以在O(1)时间内查询和更新每种商品的数量。

算法步骤

  1. 统计货架上的商品数量

    • 遍历货架上的商品字符串 s,更新 stock 数组。
  2. 统计顾客想要购买的商品种类

    • 遍历顾客需求的字符串 c,检查货架上是否有该商品(即 stock[wantedItem - 'a'] > 0)。
    • 如果有,则增加 sales 的计数,并减少该商品的库存。

代码实现

java代码解读
复制代码
public class Main {public static int solution(int n, int m, String s, String c) {int[] stock = new int[26];  for (char item : s.toCharArray()) {  stock[item - 'a']++;  }  int sales = 0;  // 遍历顾客想要的商品列表  for (char wantedItem : c.toCharArray()) {  // 如果货架上有这种商品  if (stock[wantedItem - 'a'] > 0) {  sales++; // 增加销售数量  stock[wantedItem - 'a']--; // 减少库存数量  }}  return sales;}public static void main(String[] args) {System.out.println(solution(3, 4, "abc", "abcd") == 3);System.out.println(solution(4, 2, "abbc", "bb") == 2);System.out.println(solution(5, 4, "bcdea", "abcd") == 4);}
}

知识点总结

  1. 数组的使用

    • 定义和初始化int[] stock = new int[26];
    • 索引访问stock[item - 'a']++;
    • 数组用于统计:通过数组 stock 统计每种商品在货架上的出现次数。
  2. 字符串操作

    • 字符串转换为字符数组s.toCharArray()
    • 遍历字符数组for (char item : s.toCharArray())
    • 字符串转换为字符数组c.toCharArray()
    • 遍历字符数组for (char wantedItem : c.toCharArray())
  3. 字符操作

    • 字符减法item - 'a',将字符转换为数组索引。
    • 字符比较stock[wantedItem - 'a'] > 0,检查货架上是否有该商品。
  4. 条件判断

    • if 语句if (stock[wantedItem - 'a'] > 0),判断货架上是否有该商品。
  5. 变量操作

    • 变量自增sales++;,增加销售数量。
    • 数组元素自减stock[wantedItem - 'a']--;,减少库存数量。
  6. 方法定义和调用

    • 方法定义public static int solution(int n, int m, String s, String c)
    • 方法调用solution(3, 4, "abc", "abcd")
  7. 输出结果

    • System.out.printlnSystem.out.println(solution(3, 4, "abc", "abcd") == 3);

复杂度分析

  • 时间复杂度:O(n + m),其中 n 是货架上的商品数量,m 是顾客想要购买的商品种类数。
  • 空间复杂度:O(1),因为我们只使用了固定大小的数组。

通过这个算法,我们可以在最优调整下,计算出最多可以卖出多少件商品。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/470299.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

3.5【数据库系统】ER图

2、实体之间的关系 下面主要针对两个实体间的关系进行介绍 (a)一对一联系(1:1)如班级和班长,一个班级只有一个班长,一个班长只能在一个班级任职。 (b)一对多联系(1&#…

笔记 | image may have poor performance,or fail,if run via emulation

在Docker Desktop中现象如图: 当你运行 AMD64 平台代码时(Intel 和 AMD 芯),你的 Mac 必须模拟其CPU架构(因为你自身是ARM)。这通常会非常吃性能。 Docker Desktop 警告你在模拟 Intel/AMD x64 CPU 时性能可…

想租用显卡训练自己的网络?AutoDL保姆级使用教程(PyCharm版)

各位小伙伴们大家好~ 不知道各位同学在科研过程中是否有这样的苦恼 电脑无显卡。难不成我要用CPU跑实验吗?救救我吧电脑显卡算力太低。训练过程慢慢慢慢慢,等半天都出不来结果电脑显卡显存不够,batchsize稍微高一点点,就要爆显存…

Linux相关习题-gcc-gdb-冯诺依曼

1.将一个test.c文件仅仅进行汇编而不生成可执行程序的命令是? A.gcc -S test.c B.gcc -E test.c C.gcc -c test.c D.gcc test.c gcc常见选项: -c 汇编完成后停止,不进行链接 -E 预处理完成后停止,不进行编译 -S 编译完成后停止…

计算机毕业设计必看必学35755flask旅游景区热度可视化平台原创定制程序,java、PHP、python、小程序、文案全套、毕设成品等

flask旅游景点热度可视化平台 摘 要 信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题。针对旅游景点热度…

Hadoop(环境搭建篇)

这里我用的是ubnatu22.4的系统,请大家严格按照这个系统来安装 一、网络设置 1、打开虚拟机的编辑,并选择虚拟网络编辑器 2、点击更改设置 3、更改IP 二、更改主机名 1、打开终端 2、输入以下命令 hostnamectl set-hostname master 3、然后关闭终端在…

Java 堆内存管理详解:`-Xms` 和 `-Xmx` 参数的使用与默认内存设置

个人名片 🎓作者简介:java领域优质创作者 🌐个人主页:码农阿豪 📞工作室:新空间代码工作室(提供各种软件服务) 💌个人邮箱:[2435024119qq.com] &#x1f4f1…

Linux探秘坊-------1.系统核心的低语:基础指令的奥秘解析(1)

1.Linux的背景介绍 Linux 操作系统的发展历程充满了激情与创新喵~🎀 萌芽期 (1983 - 1991):Linux 的历史可追溯到 1983 年,理查德斯托曼 (Richard Stallman) 发起 GNU 计划,目标是创建一个自由软件操作系统。1987 年发…

AI写作(二)NLP:开启自然语言处理的奇妙之旅(2/10)

一、NLP 的基本概念与任务 (一)自然语言处理的研究对象 自然语言处理(NLP)处于计算机科学、人工智能和语言学的交叉领域。它所聚焦的人类社会语言信息是无比丰富和复杂的,包括口语、书面语等各种形式。这种语言信息在…

使用CubeMX一键配置Freertos

一、配置参数 1.1 API信息 1.2 版本信息 版本信息 FreeRTOS版本为10.3.1 CMSIS-RTOS 版本为2.00 如果我们不用CubeMX配置的话 还是推荐移植正点原子的,因为它的裁剪头文件比较清晰 就是那个conf的头文件,一键配置的话很方便。可能会跟原版移植的Freert…

如何提高自动驾驶中惯性和卫星组合导航pbox的精度?

Mems纯惯导里程推算精度做到千分之一,两分钟航向精度保持0.001弧度,是如何做到的? 【飞迪sigma车规高精度组合导航系统在3.6km长隧道下穿测试,135s纯惯导航向保持精度小于0.06度,隧道内转弯轨迹和直线航位推算重合#智能…

10款PDF翻译工具的探索之旅:我的使用经历与工具特色!!

在如今的时代,PDF文件已经成为我们工作、学习和生活中不可或缺的一部分。但是,当遇到一些非母语或陌生语言的PDF文档时,这要怎么办呀!这时候翻译工具就显得尤为重要了。这也是我所遇到过的难题,现在我将与大家分享几款…

MySQL_第13章_视图

1. 常见的数据库对象 2. 视图概述 2.1 为什么使用视图? 视图一方面可以使用表的一部分而不是所有的表,另一方面也可以针对不同的用户制定不同的查询视图。 2.2 视图的理解 视图是一种虚拟表,本身是不具有数据的,占用很少的内存…

【测试框架篇】单元测试框架pytest(1):环境安装和配置

一、pytest简介 Pytest是Python的一种单元测试框架,与Python自带的unittest测试框架类似,但是比 unittest框架使用起来更简洁,效率更高。 二、pytest特点 Pytest是一个非常成熟的Python测试框架,主要特点有以下几点: 非常容易…

Camera Tuning中AE/AWB/AF基础知识介绍

3A定义 3A是Camera ISP控制算法的一个重要组成部分,通常分为自动曝光(AE)、自动聚焦(AF)、自动白平衡(AWB)三个组件。 自动曝光(Auto Exposure) AE基本概念 曝光概念…

group_concat配置影响程序出bug

在 ThinkPHP 5 中,想要临时修改 MySQL 数据库的 group_concat_max_len 参数,可以使用 原生 SQL 执行 来修改该值。你可以通过 Db 类来执行 SQL 语句,从而修改会话(Session)级别的变量。 步骤 设置 group_concat_max_l…

linux 下查看程序启动的目录

以azkaban为例 第一步、ps -ef | grep azkaban 查询出进程号 第二步、cd /proc/ 第三步 、cd 进程号 第四部 ll 查看详情 查看jar 位置 查看jar 启动命令

Linux设置Nginx开机启动

操作系统环境:CentOS 7 【需要 root 权限,使用 root 用户进行操作】 原理:利用 systemctl 管理服务 设置 Nginx 开机启动 需要 root 权限,普通用户使用 sudo 进行命令操作 原理:利用 systemctl 管理服务 1、新建…

红帽认证和华为认证哪个好?看完这4点你就明白了

就算在一堆的认证里面,华为和红帽也因为它们特别权威、含金量特别高而显得特别突出,简直就是行业里的榜样。只要拿到了其中随便哪一个证书,就说明证书持有者的网络技术很厉害,找工作的时候常常能给自己加点分。 不过好多人都不太…

初始JavaEE篇 —— 网络编程(2):了解套接字,从0到1实现回显服务器

找往期文章包括但不限于本期文章中不懂的知识点: 个人主页:我要学编程程(ಥ_ಥ)-CSDN博客 所属专栏:JavaEE 目录 TCP 与 UDP Socket套接字 UDP TCP 网络基础知识 在一篇文章中,我们了解了基础的网络知识,网络的出…