给定一个整数数组 A,坡是元组 (i, j),其中 i < j 且 A[i] <= A[j]。这样的坡的宽度为 j - i。
找出 A 中的坡的最大宽度,如果不存在,返回 0 。
示例 1:
输入: [6,0,8,2,1,5]
输出: 4
解释:
最大宽度的坡为 (i, j) = (1, 5): A[1] = 0 且 A[5] = 5.
示例 2:
输入: [9,8,1,0,1,9,4,0,4,1]
输出: 7
解释:
最大宽度的坡为 (i, j) = (2, 9): A[2] = 1 且 A[9] = 1.
题解 :
/**
* @param {number[]} nums
* @return {number}
*/
var maxWidthRamp = function (nums) {
const stack = []
let ans = 0
// 单调递减stack内塞入递减下标
for (let i = 0; i < nums.length; i++) {
if (!stack.length || nums[stack[stack.length - 1]] > nums[i]) {
stack.push(i)
}
}
// 从后向前遍历找出最大宽度
// 满足元祖i < j 且A[i] <= A[j]
for (let j = nums.length - 1; j >= 0; j--) {
while (stack.length && nums[stack[stack.length - 1]] <= nums[j]) {
ans = Math.max(ans, j - stack.pop())
}
}
return ans
};
来源:力扣(LeetCode)
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。