LeetCode 962.最大宽度坡

给定一个整数数组 A,坡是元组 (i, j),其中 i < j 且 Ai <= Aj。这样的坡的宽度为 j - i。

找出 A 中的坡的最大宽度,如果不存在,返回 0 。

示例 1:

输入:6,0,8,2,1,5

输出:4

解释:

最大宽度的坡为 (i, j) = (1, 5): A1 = 0 且 A5 = 5.

示例 2:

输入:9,8,1,0,1,9,4,0,4,1

输出:7

解释:

最大宽度的坡为 (i, j) = (2, 9): A2 = 1 且 A9 = 1.

提示:

2 <= A.length <= 50000

0 <= Ai <= 50000

首先,我们先从后向前遍历数组,构建一个越靠近栈顶越大的栈,之后从前向后遍历数组,如果遍历到的数字比栈顶数字小,就将当前坡的宽度作为可能的答案:

cpp 复制代码
class Solution {
public:
    int maxWidthRamp(vector<int>& nums) {
        stack<int> stk;
        for (int i = nums.size() - 1; i >= 0; --i) {
            if (stk.empty() || nums[i] >= nums[stk.top()]) {
                stk.push(i);
            }
        }

        int ans = 0;
        for (int i = 0; i < nums.size(); ++i) {
            while (!stk.empty() && nums[i] <= nums[stk.top()]) {
                ans = max(ans, stk.top() - i);
                stk.pop();
            }

            if (stk.empty()) {
                break;
            }
        }

        return ans;
    }
};

如果nums的长度为n,则此算法时间复杂度为O(n),空间复杂度为O(n)。

相关推荐
wabs6665 分钟前
关于二叉树【力扣572.另一棵树的子树的思考】
数据结构·c++·算法·leetcode·二叉树
hanlin039 分钟前
刷题笔记:力扣第41题-缺失的第一个正数
笔记·算法·leetcode
shehuiyuelaiyuehao41 分钟前
算法50,分治归并,数组中的逆序对
java·算法
阳明山水1 小时前
校准分位数驱动智能库存决策
人工智能·深度学习·算法·机器学习·架构
别动我齐刘海3 小时前
ROS2 Jazzy + C++ 实战路线——进阶学习3
c++·人工智能·vscode·python·算法·机器学习·机器人
zhangfeng11333 小时前
《从“人工适配“到“智能生成“:KernelSwift 跨国产芯片算子迁移全栈方案解读》 —— 强调范式跃迁和跨硬件属性,适合偏架构分析的写法
人工智能·算法·华为·ai编程·npu
0+1113 小时前
算法 --滑动窗口
c++·算法·leetcode
天真小巫3 小时前
2026.9.19总结
职场和发展
reikocao3 小时前
大场景下 Hessian 特征值放大与退化检测
算法
hetao17338373 小时前
2026-09-18 hetao1733837 的刷题记录
c++·算法