力扣962.最大宽度坡
-
单调栈
- 栈中存从nums[0]开始的一个单调下降 的序列
- 为了让坡的底尽量小
- 然后倒序遍历nums,找符合条件的栈中元素 弹出
- 栈中存从nums[0]开始的一个单调下降 的序列
cpp
class Solution {
public:
int maxWidthRamp(vector<int>& nums) {
int n = nums.size();
int res = 0;
stack<int> st;
for(int i=0;i<n;i++)
if(st.empty() || nums[st.top()] > nums[i])
st.emplace(i);
for(int i=n-1;i>=0;i--)
{
while(!st.empty() && nums[st.top()] <= nums[i])
{
int t = st.top();
st.pop();
res = max(res,i - t);
}
}
return res;
}
};