力扣2454. 下一个更大元素 IV

力扣2454. 下一个更大元素 IV

题目

题目解析及思路

题目要求对于每个数,找到右边比它大的第二个数,并记录在ans数组中

如果是右边第一个大的,就用一个递减栈即可,栈顶元素如果<当前元素则弹出

第二个大数就要利用弹出的栈顶元素,再开一个栈将弹出的元素存下来

当进来一个新数时跟t栈栈顶元素比较,如果x > t.top() 则t.top()对应的元素的answer值为x

参考题解

代码

cpp 复制代码
class Solution {
public:
    vector<int> secondGreaterElement(vector<int>& nums) {
        int n = nums.size();
        vector<int> ans(n,-1),s,t;
        for(int i=0;i<n;i++){
            int x = nums[i];
            //新数先与t栈栈顶元素比较
            while(!t.empty() && nums[t.back()] < x){
                ans[t.back()] = x;
                t.pop_back();
            }
            int j = s.size();
            //不满足条件的弹出s栈
            while(j && nums[s[j-1]] < x){	`	
                j --;
            }
            //因为s栈和t栈都是递减栈,所以直接整个移过去就行
            t.insert(t.end(),s.begin()+j,s.end());
            s.resize(j);
            s.push_back(i);
        }

        return ans;
    }
};
相关推荐
luckys.one1 小时前
第9篇:Freqtrade量化交易之config.json 基础入门与初始化
javascript·数据库·python·mysql·算法·json·区块链
~|Bernard|2 小时前
在 PyCharm 里怎么“点鼠标”完成指令同样的运行操作
算法·conda
战术摸鱼大师3 小时前
电机控制(四)-级联PID控制器与参数整定(MATLAB&Simulink)
算法·matlab·运动控制·电机控制
Christo33 小时前
TFS-2018《On the convergence of the sparse possibilistic c-means algorithm》
人工智能·算法·机器学习·数据挖掘
好家伙VCC4 小时前
数学建模模型 全网最全 数学建模常见算法汇总 含代码分析讲解
大数据·嵌入式硬件·算法·数学建模
liulilittle5 小时前
IP校验和算法:从网络协议到SIMD深度优化
网络·c++·网络协议·tcp/ip·算法·ip·通信
bkspiderx7 小时前
C++经典的数据结构与算法之经典算法思想:贪心算法(Greedy)
数据结构·c++·算法·贪心算法
中华小当家呐8 小时前
算法之常见八大排序
数据结构·算法·排序算法
沐怡旸8 小时前
【算法--链表】114.二叉树展开为链表--通俗讲解
算法·面试