首页 > 其他分享 >单调栈

单调栈

时间:2024-01-25 21:22:22浏览次数:23  
标签:int 折扣 st vector temperatures prices 单调

leetcode 739 每日温度

题意:给出一个数组,返回一个vector ans数组,其中 ans[i] 记录下一个温度更高的数字的下标。
temperatures = [73,74,75,71,69,72,76,73]
st = []
单调栈原理建议b站灵茶学习.
C++ 逆序遍历版本

class Solution {
public:
    vector<int> dailyTemperatures(vector<int>& temperatures) { 
        int n = temperatures.size();
        vector<int> res(n, 0);
        stack<int> st ;
        for(int i = n-1;i>=0;i--){  // 倒序遍历
            int temp = temperatures[i];
            while(!st.empty() && temperatures[st.top()]<=temp){
                st.pop();
            }
            if(!st.empty()){
                res[i] = st.top()-i;
            }
            st.push(i);
        }
        return res;
    }
};

C++ 正序遍历版本

class Solution {
public:
    vector<int> dailyTemperatures(vector<int>& temperatures) { 
        int n = temperatures.size();
        vector<int> res(n, 0);
        stack<int> st ;
        for(int i =0;i<n;i++){
            int temp = temperatures[i];
            while(!st.empty() && temperatures[st.top()]<temp ){
                res[st.top()] = i-st.top();
                st.pop();
            }
            st.push(i);
        }
        return res;
    }
};

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

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

商店里正在进行促销活动,如果你要买第 i 件商品,那么你可以得到与 prices[j] 相等的折扣,其中 j 是满足 j > i 且

prices[j] <= prices[i] 的 最小下标 ,如果没有满足条件的 j ,你将没有任何折扣。

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

Eg.
输入: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 。

标签:int,折扣,st,vector,temperatures,prices,单调
From: https://www.cnblogs.com/fakecoderLi/p/17988179

相关文章

  • CF-91-B-单调栈+二分
    91-B题目大意给定一个长为\(n\)的序列\(a\),对于每个\(a[i]\),你需要找到一个\(j\)满足\(a[i]>a[j]\)且\(j-i\)最大。Solution逆序遍历,维护一个单调递减的栈,如果当前枚举的\(a[i]\)小于栈顶元素,则入栈。如果\(a[i]\)大于栈顶元素,那么后面的元素如果大于\(a[i]\),那么也大于栈顶......
  • 算法学习Day37单调递增的数字
    Day37单调递增的数字ByHQWQF2024/01/22笔记738.单调递增的数字给定一个非负整数 N,找出小于或等于 N 的最大的整数,同时这个整数需要满足其各个位数上的数字是单调递增。(当且仅当每个相邻位数上的数字 x 和 y 满足 x<=y 时,我们称这个整数是单调递增的。)示例1:......
  • P1886 滑动窗口 /【模板】单调队列
    P1886滑动窗口/【模板】单调队列https://www.luogu.com.cn/problem/P1886 思路https://zhuanlan.zhihu.com/p/346354943 Codehttps://www.luogu.com.cn/record/143623041LLn,k;LLa[1000005];deque<LL>maxd,mind;intmain(){cin>>n>>k;......
  • 单调栈
    单调栈是一种栈,但栈里面的元素是具有单调性的,所以被称为单调栈单调栈解决最经典的问题是每个位置都求当前位置左边最近且小于(大于)当前位置的元素的位置当前位置右边最近且小于(大于)当前位置的元素的位置  单调栈模板  #define_CRT_SECURE_NO_WARNINGS#include......
  • 单调栈
    概述栈中元素满足单调性的线性数据结构板子题P5788【模板】单调栈-洛谷|计算机科学教育新生态(luogu.com.cn)题意即求每一个数的下一个更大数的下标。思路维护一个单调递减的栈。每次插入元素与栈顶进行比较大于等于栈顶栈顶不停出栈,直到该元素小于栈顶或栈......
  • 滑动窗口的最大值 239 单调队列初识
    最开始做的时候,暴力解法结果不管怎么剪枝,还是超时了。后来看到了卡哥的方法,学到了单调队列,其实就是自定义队列。用deque来实现。有三个关键点:pop,push,front.pop,如果遍历的元素等于队头元素,则头删。push,把比遍历元素小的都进行尾部删。front,就是普通的查找队头。循环遍历的时......
  • CF-514-D-单调队列
    514-D题目大意给定\(n\)个人,每个人有\(m\)个属性,第\(i\)个人的第\(j\)个属性值为\(a[i][j]\)。最多可以执行\(k\)次操作,每次操作选定一个属性,把所有人的该属性减\(1\),求一段最长的区间,满足执行所有操作之后该区间中所有人的所有属性全部为\(0\)。Solution转换一下思考方向,求......
  • dp优化-决策单调性 / 四边形不等式
    前言这种优化我以前“听”过了很多次,但是好像都没学会qwq。四边形不等式:对于二元组\(w_{x,y}\),如果在定义域上任取四个点\(a\leb\lec\led\),满足:\[w_{a,b}+w_{c,d}\gew_{a,c}+w_{b,d}\]则称\(w_{x,y}\)满足四边形不等式。你会想这鬼东西怎么记?反正我也不想记。......
  • elixir erlang 简单调用学习
    实际上基于elixir的mix进行erlang以及elixir的互调用开发处理是很方便的,mix直接就包含了构建erlang代码同时对于代码的互调用,只要使用符合语言格式要求就行了,以下是一个简单的互调用学习项目准备项目结构 ├──README.md├──lib│├──a.ex│└──er_app......
  • elixir erlang 简单调用学习
    实际上基于elixir的mix进行erlang以及elixir的互调用开发处理是很方便的,mix直接就包含了构建erlang代码同时对于代码的互调用,只要使用符合语言格式要求就行了,以下是一个简单的互调用学习项目准备项目结构 ├──README.md├──lib│├──a.e......