1475.商品折扣后的最终价格

news2024/11/25 11:03:37

文章目录

  • 题目描述
  • 解题思路:
    • 方法一:通俗解法
    • 方法二:单调栈

leetcode原题链接 1475. 商品折扣后的最终价格

题目描述

给你一个数组 prices ,其中 prices[i] 是商店里第 i 件商品的价格。

商店里正在进行促销活动,如果你要买第 i 件商品,那么你可以得到与 prices[j] 相等的折扣,其中 j 是满足 j > iprices[j] <= prices[i]最小下标 ,如果没有满足条件的 j ,你将没有任何折扣。

请你返回一个数组,数组中第 i 个元素是折扣后你购买商品 i 最终需要支付的价格。

提示1:

输入:prices = [8,4,6,2,3]
输出:[4,2,4,2,3]
解释:
商品 0 的价格为 price[0]=8 ,你将得到 prices[1]=4 的折扣,所以最终价格为 8 - 4 = 4 。
商品 1 的价格为 price[1]=4 ,你将得到 prices[3]=2 的折扣,所以最终价格为 4 - 2 = 2 。
商品 2 的价格为 price[2]=6 ,你将得到 prices[3]=2 的折扣,所以最终价格为 6 - 2 = 4 。
商品 3 和 4 都没有折扣。

提示2:

输入:prices = [1,2,3,4,5]
输出:[1,2,3,4,5]
解释:在这个例子中,所有商品都没有折扣。

提示3:

输入:prices = [10,1,1,6]
输出:[9,0,1,6]

提示:

  • 1 <= prices.length <= 500
  • 1 <= prices[i] <= 10^3

解题思路:

方法一:通俗解法

根据题意求出每件商品的折扣,然后商品的原价减去折扣即够买价格。

i件商品的折扣是由第i件商品之后([i+1, n))的第一个小于等于prices[i]的商品价格。因此由两层循环可求出每件商品的折扣。

public int[] finalPrices(int[] prices) {
    int n = prices.length;
    int[] discount = new int[n];
    for (int i = 0; i < n; i++) {
        discount[i] = prices[i];
        for (int j = i + 1; j < n; j++) {
            if (prices[j] <= prices[i]) {
                discount[i] -= prices[j];
                break;
            }
        }
    }
    return discount;
}

方法二:单调栈

维护一个元素由栈底到栈顶单调递增的栈。具体地,我们遍历元素,如果当前元素小于等于栈顶元素(栈不为空),说明当前元素是栈顶元素的折扣。如下图,入栈元素4是栈中6, 8元素的折扣。当遇到小于等于栈顶元素时,栈顶元素需要出栈(因为要维护栈中元素单调递增)。

image-20230814204021877

为了方便,栈中元素存储元素的下标。

public int[] finalPrices1(int[] prices) {
    int n = prices.length;
    Stack<Integer> stack = new Stack<>();
    int[] discount = new int[n];
    for (int i = 0; i < n; i++) {
        while (!stack.isEmpty() && prices[i] <= prices[stack.peek()]) {
            int idx = stack.pop();
            discount[idx] = prices[idx] - prices[i];
        }
        discount[i] = prices[i];
        stack.push(i);
    }
    return discount;
}

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

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

相关文章

linux安装oracle11g

linux安装oracle11g 环境&#xff1a; redhat7 版本 11.2.0.4 一、部署环境准备 1.1 关闭selinux [rootlocalhost software]# vi /etc/selinux/config # This file controls the state of SELinux on the system. # SELINUX can take one of these three values: # enforci…

JavaFx基础学习【五】:FXML布局文件使用

一、介绍 FXML是一种在JavaFX应用程序中定义用户界面的&#xff0c;基于XML的声明性标记语言。FXML非常适用来静态布局&#xff0c;如表单、控件和表格。 如果你还不是不明白FXML到底是什么&#xff0c;你可以类比HTML&#xff0c;我们可以通过HTML来做web页面的UI&#xff0…

全文检索与日志管理 Elasticsearch(上)

一、Elasticsearch介绍 1.1 全文检索索引 Elasticsearch是一个全文检索服务器&#xff0c;全文检索是一种非结构化数据的搜索方式。 那么什么是结构化数据和非结构化数据呢&#xff1f; 结构化数据&#xff1a;指具有固定格式固定长度的数据&#xff0c;如数据库中的字段。 …

【RH850/U2A】:DMA开发笔记

DMA开发笔记 项目背景参考文档DMA开发过程开发过程中的问题汇总框图预览设计思路重点注意DMA的功能安全属性串口的DMA请求信号模式选择配置DMA的中断如果我们买了第三方的模块(比如LIN/UART)它是自带DMA配置开启功能;奈何,我们没有购买第三方模块所以需要我们参考datasheet…

Python Opencv实践 - 图像放射变换

import cv2 as cv import numpy as np import matplotlib.pyplot as pltimg cv.imread("../SampleImages/pomeranian.png", cv.IMREAD_COLOR) rows,cols img.shape[:2] print(img.shape[:2])#使用getAffineTransform来获得仿射变换的矩阵M #cv.getAffineTransform(…

(白帽黑客)大厂面试题

以下为网络安全各个方向涉及的面试题&#xff0c;星数越多代表问题出现的几率越大&#xff0c;祝各位都能找到满意的工作。 注&#xff1a;本套面试题&#xff0c;已整理成pdf文档&#xff0c;但内容还在持续更新中&#xff0c;因为无论如何都不可能覆盖所有的面试问题&#xf…

Django之定时任务--apscheduler

Django--定时任务apscheduler的使用 apscheduler定时任务的使用1、安装包2、配置settings.py3、在manage.py的文件同级目录下创建文件scheduler.py4、在项目的urls.py中调用这个定时计划5、然后启动项目 python manage.py runserver,在admin中查看就能看到你的定时任务及执行的…

LeetCode刷题——617. 合并二叉树

617. 合并二叉树 给你两棵二叉树&#xff1a; root1 和 root2 。 想象一下&#xff0c;当你将其中一棵覆盖到另一棵之上时&#xff0c;两棵树上的一些节点将会重叠&#xff08;而另一些不会&#xff09;。你需要将这两棵树合并成一棵新二叉树。合并的规则是&#xff1a;如果两…

嵌入式:ARM Day1

1. 思维导图 2.作业一 3.作业2

selenium自动化测试之搭建测试环境

自动化测试环境&#xff1a; Python3.7Selenium3.141谷歌浏览器76.0/火狐浏览器 1、安装Python并配置环境变量。 下载并安装&#xff1a;配置环境变量&#xff1a;C:\Python37;C:\Python37\Scripts; 2、安装Pycharm开发工具。 下载地址&#xff1a; 注意下载&#xff1a;Co…

stm32项目(10)——基于stm32的盲人监护系统

一.实现的功能 本次设计的盲人监护系统&#xff0c;旨在为盲人的外出提供保护。主要功能如下&#xff1a; 超声波测距模块检测前方障碍物&#xff0c;当前方有障碍物时&#xff0c;语音模块报警提示“前方有障碍物&#xff0c;请绕道”&#xff0c;盲人在听到这条语音后就知…

一篇文章搞懂图像的本质是什么

图像是什么&#xff1f; 每个图⽚可以看成数组 彩⾊图⽚呢&#xff1f; #pic_center 500x500 计算机眼⾥的颜⾊图⽚ Numpy读取彩⾊照⽚ • Shape 三维数组 • ⾼度 • 宽度 • 颜⾊通道 Numpy读取彩⾊照⽚ • 照⽚⼤⼩ 540 x 480 • 540个像素宽度 • 480个像素⾼度 • 3个颜…

[NDK]从Opengles到Vulkan-基础篇(2)-运行配置

上一篇我们介绍了Opengl和Vulkan运行环境的不同。 引入Opengles,我们需要做的是,在Cmakes中配置动态库引入。 使用opengles2就用GLESv2,用es3就用GLESv3,而EGL需要使用配置EGL环境 这里两个比较基础的东西是EGL和GLES的库引入。 es2只要Android 4.0就开始支持,es3是4.4开…

【2023最新版】APP测试面试题(超详细~)

一、web测试和app测试的相同点和区别&#xff1f; 相同点&#xff1a;都离不开测试的基础知识和测试原理。具体包括以下几个方面。 测试用例&#xff0c;均使用边界值分析法&#xff0c;等价类划分法等。多数采用黑盒测试&#xff0c;来验证业务功能是否能得到正确的应用。 需…

外贸出货中惹了个大麻烦

谈C端的客户与B端的客户相比&#xff0c; 我觉得最大的好处就是不用我们自己去报关&#xff0c;一般C端的客户都会有自己的货代负责双清业务&#xff0c;即使我们自己去发货&#xff0c; 也是会找双清的货代&#xff0c;因此我们自己本身就不要报关报检&#xff0c; 只需要将货…

【云原生】K8S存储卷:PV、PVC详解

目录 一、emptyDir存储卷二、hostPath存储卷三、nfs共享存储卷四、PVC 和 PV4.1 NFS使用PV和PVC4.2创建动态PV 一、emptyDir存储卷 容器磁盘上的文件的生命周期是短暂的&#xff0c;这就使得在容器中运行重要应用时会出现一些问题。首先&#xff0c;当容器崩溃时&#xff0c;ku…

Web菜鸟教程 - Radis实现高性能数据库

Redis是用C语言开发的一个高性能键值对数据库&#xff0c;可用于数据缓存&#xff0c;主要用于处理大量数据的高访问负载。 也就是说&#xff0c;如果你对性能要求不高&#xff0c;不用Radis也是可以的。不过作为最自己写的程序有高要求的程序员&#xff0c;自然是要学一下的&a…

adb对安卓app进行抓包(ip连接设备)

adb对安卓app进行抓包&#xff08;ip连接设备&#xff09; 一&#xff0c;首先将安卓设备的开发者模式打开&#xff0c;提示允许adb调试 二&#xff0c;自己的笔记本要和安卓设备在同一个网段下&#xff08;同连一个WiFi就可以了&#xff09; 三&#xff0c;在笔记本上根据i…

RunnerGo的相比较JMeter优势,能不能替代?

目前在性能测试领域市场jmeter占有率是非常高的&#xff0c;主要原因是相对比其他性能测试工具使用更简单&#xff08;开源、易扩展&#xff09;&#xff0c;功能更强大&#xff08;满足多种协议的接口&#xff09;&#xff0c;但是随着研发协同的升级&#xff0c;平台化的性能…

手机出现 不读卡 / 无信号时应该怎么办?

当手机屏幕亮起&#xff0c;一般在屏幕最上方都会有代表手机卡状态的显示&#xff0c;其中网络信号和读卡状态的标识&#xff0c;依旧有很多人分不太清&#xff0c;更不清楚改怎么办了。 1、当我们的手机里有两张卡时&#xff0c;则会有两个信号显示 2、信号状态一般是由短到…