首页 > 其他 > 详细

leetcode 1063. Number of Valid Subarrays

时间:2020-03-29 16:35:16      阅读:74      评论:0      收藏:0      [点我收藏+]

题目解析:对于每一个元素,右边第一个比它小的元素之前的元素构成的子数组都满足条件,也就是求右边第一个比它小的元素位置pos,将res += pos-i ;可以用单调栈来实现。遍历结束后,对于仍在栈中的元素,res += n - i ;时间复杂度为O(N) , 空间复杂度为O(N);

class Solution {
public:
    int validSubarrays(vector<int>& nums) 
    {
        int res = 0 ;
        stack<int> s ;
        for(int i = 0 ; i < nums.size() ; i++)
        {
            while(!s.empty() && nums[i] < nums[s.top()])
            {
                res += i - s.top() ;
                s.pop() ;
            }
            
            s.push(i) ;
        }
        
        while(!s.empty()) 
        {
            res += nums.size() - s.top() ;
            s.pop() ;
        }
        
        return res ;
    }
};

  

leetcode 1063. Number of Valid Subarrays

原文:https://www.cnblogs.com/mychen06/p/12592729.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!