关于定义
应用
-
最大宽度坡
-
问题描述
给定一个整数数组 A,坡是元组 (i, j),其中 i < j 且 A[i] <= A[j]。这样的坡的宽度为 j - i。
找出 A 中的坡的最大宽度,如果不存在,返回 0 。 -
示例
输入:[6,0,8,2,1,5]
输出:4
解释:最大宽度的坡为 (i, j) = (1, 5): A[1] = 0 且 A[5] = 5. -
解答演示
-
代码c++
#include <iostream> #include <algorithm> #include <vector> #include <stack> int maxWidthRamp(vector<int>& A) { stack<int> mstack; int ret = 0; int len = A.size(); mstack.push(0); //构造单调递减栈 for (int i = 1; i < len; i++) if (A[i] < A[mstack.top()]) mstack.push(i); //原数组从后向前搜索 for (int i = len - 1; i > ret; i--) while (!mstack.empty() && A[mstack.top()] <= A[i]) { ret = max(ret, i - mstack.top()); mstack.pop(); } return ret; }
-
待补充