转盘寿司 - 华为OD统一考试

OD统一考试(C卷)

分值: 100分

题解: Java / Python / C++

alt

题目描述

寿司店周年庆,正在举办优惠活动回馈新老用户。

寿司转盘上总共有 n 盘寿司, prices[i] 是第 i 盘寿司的价格。

如果客户选择了第 i 盘寿司, 寿司店免费赠送客户距离第 i 盘寿司最近的下一盘寿司 j ,前提是 prices[j] < prices[i],如果没有满足条件的 i ,则不赠送寿司。

每个价格的寿司都可无限供应。

输入描述

输入的每一个数字代表寿司的价格,每盘寿司的价格之间使用空格分隔,例如:

3 15 6 14

表示:

  • 第 0 盘寿司价格 prices[0] 为 3
  • 第 1 盘寿司价格 prices[1] 为 15
  • 第 2 盘寿司价格 prices[2] 为 6
  • 第 3 盘寿司价格 prices[3] ​为 14
  • 寿司的盘数 n 范围为:1 ≤ n ≤ 500

每盘寿司的价格 price 范围为:1≤ price ≤1000

输出描述

输出享受优惠后的一组数据,每个值表示客户端选择第 i 盘寿司实际得到的寿司的总价格,使用空格进行分隔,例如:

3 21 9 17

示例1

输入:
3 15 6 14输出:
3 21 9 17

题解

单调栈是一种特殊的栈数据结构,用于解决一类与找下一个更大或更小元素相关的问题。

在这个问题中,我们使用单调递减栈。

单调栈的基本思想是,维护一个栈,使得栈内的元素保持单调递减(或单调递增)。当新元素要入栈时,我们需要弹出栈内所有比该元素小的元素,以确保栈的单调性。这样,在栈中,每个元素的下一个更小(或更大)的元素就是它本身。

在这个问题中,我们用单调递减栈来维护右边第一个价格比当前寿司价格小的寿司位置。算法的步骤如下:

  1. 初始化一个空栈 st 和一个数组 gift,其中 gift[i] 表示免费赠送寿司价格,默认为 0。
  2. 从左到右遍历两倍的寿司列表,记当前索引为 idx
  3. 如果栈 st 不为空且当前寿司价格 prices[idx] 小于栈顶寿司价格 prices[st.top()],则出栈,维护免费赠送寿司价格。
  4. 将当前索引 idx 入栈。
  5. 遍历结束后,gift[i] 就是每盘寿司实际免费得到赠送寿司的价格。
  6. 然后打印输出每盘寿司实际得到的寿司的总价格即可。

Java

import java.util.*;/*** @author code5bug*/
public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);List<Integer> prices = new ArrayList<>();while (scanner.hasNextInt()) {prices.add(scanner.nextInt());}int n = prices.size();// gift[i] 表示免费赠送寿司价格int[] gift = new int[n];// 大顶栈Deque<Integer> st = new ArrayDeque<Integer>();for (int i = 0; i < 2 * n; i++) {int idx = i % n;// 当前价格小于栈顶价格时则出栈, 并维护免费赠送寿司价格while (!st.isEmpty() && prices.get(st.peek()) > prices.get(idx)) {int popIdx = st.pop();if (gift[popIdx] == 0) {gift[popIdx] = prices.get(idx);}}st.push(idx);}for (int i = 0; i < n; i++) {System.out.print((prices.get(i) + gift[i]) + " ");}}
}

Python

from collections import dequeprices = list(map(int, input().split()))
n = len(prices)# gift[i] 表示免费赠送寿司价格
gift = [0] * n
# 大顶栈
st = deque()
for i in range(2 * n):idx = i % n# 当前价格小于栈顶价格时则出栈, 并维护免费赠送寿司价格while st and prices[st[-1]] > prices[idx]:pop_idx = st.pop()if gift[pop_idx] == 0:gift[pop_idx] = prices[idx]st.append(idx)for i in range(n):print(prices[i] + gift[i], end=" ")

C++

#include <iostream>
#include <vector>
#include <stack>using namespace std;int main() {vector<int> prices;int price;while(cin >> price) {prices.push_back(price);}int n = prices.size();// gift[i] 表示免费赠送寿司价格vector<int> gift(n, 0);// 大顶栈stack<int> st;for(int i = 0; i < 2 * n; i++) {int idx = i % n;// 当前价格小于栈顶价格时则出栈, 并维护免费赠送寿司价格while(!st.empty() && prices[st.top()] > prices[idx]) {int pop_idx = st.top();if(gift[pop_idx] == 0) {gift[pop_idx] = prices[idx];}st.pop();}st.push(idx);}for(int i = 0; i < n; i++) {cout << prices[i] + gift[i] << " ";}return 0;
}

相关练习题

题号题目难度难易度
LeetCode 907907. 子数组的最小值之和中等1976
LeetCode 768768. 最多能完成排序的块 II困难1788

‍❤️‍华为OD机试面试交流群每日真题分享): 加V时备注“华为od加群”

🙏整理题解不易, 如果有帮助到您,请给点个赞 ‍❤️‍ 和收藏 ⭐,让更多的人看到。🙏🙏🙏

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

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

相关文章

pytorch 优化训练显存方式

转载自&#xff08;侵删&#xff09;&#xff1a; https://www.cnblogs.com/chentiao/p/17901639.html 1. 显存都用在哪儿了&#xff1f; 一般在训练神经网络时&#xff0c;显存主要被网络模型和中间变量占用。 网络模型中的卷积层&#xff0c;全连接层和标准化层等的参数占…

R语言【taxlist】——subset():取taxlist对象的子集

Package taxlist version 0.2.4 Description taxlist对象的子集将通过逻辑操作或模式匹配来完成。子集可以引用包含在插槽taxonNames、taxonRelations或taxonTraits中的信息。 Usage ## S4 method for signature taxlist subset(x,subset,slot "names",keep_child…

【游戏服务器部署】幻兽帕鲁服务器一键部署保姆级教程,游戏私服还是自己搭建的香

在帕鲁的世界&#xff0c;你可以选择与神奇的生物「帕鲁」一同享受悠闲的生活&#xff0c;也可以投身于与偷猎者进行生死搏斗的冒险。帕鲁可以进行战斗、繁殖、协助你做农活&#xff0c;也可以为你在工厂工作。你也可以将它们进行售卖&#xff0c;或肢解后食用。—幻兽帕鲁 想要…

ThinkPHP5.0.0~5.0.23反序列化利用链分析

本次测试环境仍然是ThinkPHP v5.0.22版本&#xff0c;我们将分析其中存在的一条序列化链。 一道CTF题 这次以一道CTF题作为此次漏洞研究的开头。题中涉及PHP的死亡绕过技巧&#xff0c;是真实环境中存在的情况。 $payload; $filename$payload.468bc8d30505000a2d7d24702b2cda…

春季选品策略:如何在Shopee平台上脱颖而出

在Shopee平台上进行春季选品时&#xff0c;卖家需要制定有效的策略来吸引消费者的注意并提高销售业绩。本文将介绍一些关键的选品策略&#xff0c;帮助卖家在春季市场中脱颖而出。 先给大家推荐一款shopee知虾数据运营工具知虾免费体验地址&#xff08;复制浏览器打开&#xf…

MyBatis 源码系列:MyBatis 解析配置文件、二级缓存、SQL

文章目录 解析全局配置文件二级缓存解析解析二级缓存缓存中的调用过程缓存中使用的设计模式 解析SQL 解析全局配置文件 启动流程分析 String resource "mybatis-config.xml"; //将XML配置文件构建为Configuration配置类 reader Resources.getResourceAsReader(re…

探索ESP32 C++ OOP开发:与传统面向过程编程的比较

探索ESP32 OOP开发&#xff1a;与传统面向过程编程的比较 在嵌入式系统开发中&#xff0c;ESP32是一个强大的平台&#xff0c;可以应用于各种项目和应用场景。在编写ESP32代码时&#xff0c;我们可以选择使用面向对象编程&#xff08;OOP&#xff09;的方法&#xff0c;将代码…

数据结构—栈实现前缀表达式的计算

前缀表达式计算 过程分析 中缀表达式&#xff1a;&#xff08;1 5&#xff09;*3 > 前缀表达式&#xff1a;*153 &#xff08;可参考这篇文章&#xff1a;中缀转前缀&#xff09; 第一步&#xff1a;从右至左扫描前缀表达式&#xff08;已存放在字符数组中&#xff09;&a…

termux 玩法(一)

termux基础 termux基础玩法推荐国光写的手册&#xff1a;Termux 高级终端安装使用配置教程 | 国光 (sqlsec.com) termux安装 个人使用F-Droid安装的termux&#xff1a;Termux | F-Droid - Free and Open Source Android App Repository 基础知识 这些基础知识简单了解一下…

自定义模块加载(Python)

加载自定义模块&#xff0c;系统抛出“找不到文件”异常提示信息。 (笔记模板由python脚本于2024年01月28日 12:50:00创建&#xff0c;本篇笔记适合初通Python的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网&#xff1a;https://www.python.org/ Free&#xff1a;大咖免…

LeetCode316. Remove Duplicate Letters——单调栈

文章目录 一、题目二、题解 一、题目 Given a string s, remove duplicate letters so that every letter appears once and only once. You must make sure your result is the smallest in lexicographical order among all possible results. Example 1: Input: s “bca…

盲人程序员是怎么编程的?闭眼编程

解决 读代码&#xff0c;读键盘变成听。 盲人程序员可以借助屏幕阅读器来使用计算机&#xff0c;绝大多数编程工具也可以正常访问&#xff0c;所以&#xff0c;盲人掌握编程语言是没有问题的。 具体的工作流程如下&#xff1a; 使用屏幕阅读器来“阅读”屏幕上的文本和代码。…

链表——超详细

一、无头单向非循环链表 1.结构&#xff08;两个部分&#xff09;&#xff1a; typedef int SLTDataType; typedef struct SListNode {SLTDataType data;//数据域struct SListNode* next;//指针域 }SLNode; 它只有一个数字域和一个指针域&#xff0c;里面数据域就是所存放的…

3分钟搞定springboot 定时任务cron表达式

在开发过程中经常需要使用定时任务在特定的时间执行一些特定程序。而 springboot Scheduled注解中可以方便的使用 cron 表达式来配置定时任务。在这SpringBoot 实现定时任务一篇文章中我们介绍了如何使用Scheduled实现定时任务&#xff0c;下面我们看下cron该如何编写。 cron表…

万户 ezOFFICE wf_accessory_delete.jsp SQL注入漏洞复现

0x01 产品简介 万户OA ezoffice是万户网络协同办公产品多年来一直将主要精力致力于中高端市场的一款OA协同办公软件产品,统一的基础管理平台,实现用户数据统一管理、权限统一分配、身份统一认证。统一规划门户网站群和协同办公平台,将外网信息维护、客户服务、互动交流和日…

继电器模块详解

继电器&#xff0c;一种常见的电控制装置&#xff0c;其应用几乎无处不在。在家庭生活&#xff0c;继电器被广泛应用于照明系统、电视机、空调等电器设备的控制&#xff1b;在工业领域&#xff0c;它们用于控制电机、泵站、生产线等高功率设备的运行&#xff1b;继电器还在通信…

【论文收集】

Collaborative Diffusion for Multi-Modal Face Generation and Editing https://arxiv.org/abs/2304.10530 code&#xff1a;https://github.com/ziqihuangg/collaborative-diffusion 现有的扩散模型主要集中在单模态控制上&#xff0c;即扩散过程仅由一种状态模态驱动。为…

Docker的使用方式

一、Docker概念 Docker类似于一个轻量的虚拟机。 容器和镜像是Docker中最重要的两个概念&#xff0c;镜像可以保存为tar文件&#xff0c;Dockerfile是配置文件&#xff0c;仓库保存了很多第三方已经做好的镜像。 基本指令 查找镜像 docker search nginx 拉取nginx镜像 do…

携程获取景点详情 API 返回值说明

公共参数 请求地址&#xff1a;​​前往测试​​ 名称 类型 必须 描述 key String 是 调用key&#xff0c;必须以GET方式拼接在URL中&#xff09; secret String 是 调用密钥 api_name String 是 API接口名称&#xff08;包括在请求地址中&#xff09;[item_se…

搭建Jmeter分布式压测与监控,轻松实践

对于运维工程师来说&#xff0c;需要对自己维护的服务器性能瓶颈了如指掌&#xff0c;比如我当前的架构每秒并发是多少&#xff0c;我服务器最大能接受的并发是多少&#xff0c;是什么导致我的性能有问题&#xff1b;如果当前架构快达到性能瓶颈了&#xff0c;是横向扩容性能提…