题解 | #单调栈#

单调栈

http://www.nowcoder.com/practice/ae25fb47d34144a08a0f8ff67e8e7fb5

class Solution {
public:
    vector<vector<int> > foundMonotoneStack(vector<int>& nums) {
        // write code here
        vector<vector<int>>res(nums.size(),vector<int>(2));
        stack<int>l,r;
        for(int i=0;i<nums.size();i++)
        {
            int t=nums[i];
            if(l.empty())
            {
                res[i][0]=-1;
            }else if(nums[l.top()]<t){
                res[i][0]=l.top();
            }
            else if(nums[l.top()]>=t){
                while (!l.empty() && nums[l.top()]>=t){
                    l.pop();
                }
                res[i][0]=(l.empty()?-1:l.top());
            }
            l.push(i);
        }
        for(int j=nums.size()-1;j>=0;j--)
        {
            int t=nums[j];
            if(r.empty())
            {
                res[j][1]=-1;
            }else if(nums[r.top()]<t){
                res[j][1]=r.top();
            }
            else if(nums[r.top()]>=t){
                while (!r.empty() && nums[r.top()]>=t){
                    r.pop();
                }
                res[j][1]=(r.empty()?-1:r.top());
            }
            r.push(j);
        }

        return res;
    }
};
全部评论

相关推荐

01-07 15:50
四川大学 Java
看日出看日落:好好背八股,做算法。我身边跟你bg差不多的基本都大厂暑期
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务