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)。

相关推荐
阿正的梦工坊12 分钟前
【Rust】07-错误处理:Option、Result 与 ? 运算符
开发语言·算法·rust
八解毒剂2 小时前
数据结构-平衡二叉树——对二叉搜索树的优化
数据结构·c++·算法
运行时记录2 小时前
别再手动写提示词了 — SkillOpt 让技能文档自己进化
算法
啦啦啦啦啦zzzz2 小时前
算法总结(二分查找、双指针)
c++·算法
qq_8573058193 小时前
python语法
开发语言·python·算法
DXM05213 小时前
第9期|从机器学习到深度学习:AI遥感解译的进化逻辑
人工智能·算法·计算机视觉
小蒋学算法3 小时前
算法-阶乘函数后K个零
算法
weixin_307779133 小时前
智能模拟数据生成平台:生成式AI合成数据技术重塑开发测试效能
人工智能·测试工具·算法·测试用例
羊羊小栈4 小时前
Uplift营销供应链协同决策系统(基于Uplift因果推断与运筹优化算法)
前端·人工智能·算法·毕业设计·大作业
金融小师妹5 小时前
AI因子共振模型显示:金银比突破区间上沿,白银定价逻辑进入再校准阶段
人工智能·算法·均值算法·线性回归