leetcode962最大宽度坡
思路:单调栈 这个思路有点难想
- i<j,且 j - i 尽可能的大,那么i从左开始,j从右开始
- A[i] < = A[j],使A[i]尽可能的小,从右向左进行遍历比较
- 从A[0]开始,存储严格单调递减的i。
反向扫描比较A[j]>A[s.top()]即栈顶元素值,满足条件就弹出,直至栈为空,满足条件时要记录j - i的最大值。
int maxWidthRamp(vector
& nums){ vector<int> down;
int r = 0;
int len = nums.size();
if(len==0||len==1)
return 0;
int i;
for(i=0;i<len;i++){
if(down.empty()){
down.push_back(i);
}
else if(nums[down.back()]>nums[i])
down.push_back(i);
}
for(i=len-1;i>=0;i--){
while (!down.empty()&&nums[down.back()]<=nums[i])
{
int pos = down.back();
down.pop_back();
r = max(r,i-pos);
}
}
return r;
}
还没有评论,来说两句吧...