力扣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;
    }
};
相关推荐
代码小将1 小时前
Leetcode209做题笔记
java·笔记·算法
Musennn2 小时前
leetcode 15.三数之和 思路分析
算法·leetcode·职场和发展
CM莫问4 小时前
<论文>(微软)避免推荐域外物品:基于LLM的受限生成式推荐
人工智能·算法·大模型·推荐算法·受限生成
康谋自动驾驶5 小时前
康谋分享 | 自动驾驶仿真进入“标准时代”:aiSim全面对接ASAM OpenX
人工智能·科技·算法·机器学习·自动驾驶·汽车
C++ 老炮儿的技术栈6 小时前
什么是函数重载?为什么 C 不支持函数重载,而 C++能支持函数重载?
c语言·开发语言·c++·qt·算法
yychen_java7 小时前
R-tree详解
java·算法·r-tree
MarkHard1237 小时前
Leetcode (力扣)做题记录 hot100(62,64,287,108)
算法·leetcode·职场和发展
一只鱼^_8 小时前
牛客练习赛138(首篇万字题解???)
数据结构·c++·算法·贪心算法·动态规划·广度优先·图搜索算法
一只码代码的章鱼8 小时前
Spring的 @Validate注解详细分析
前端·spring boot·算法
邹诗钰-电子信息工程8 小时前
嵌入式自学第二十一天(5.14)
java·开发语言·算法