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

相关推荐
维克兜率天1 小时前
【维克】指数调整:哪些股票会被“强制买入“?
人工智能·python·算法
罗西的思考2 小时前
【轻量化复刻大模型】线性注意力交互式演示
人工智能·算法·机器学习
神也畏惧菠萝2 小时前
Day08 Python流程控制从入门到上瘾:if/match/while/for四件套,从B站登录一路打到猜数字游戏
python·算法·数据存储·for·while·if·ifelse
揽星河..2 小时前
【C语言】分支和循环
c语言·c++·算法
Fuyo_11194 小时前
C++ AVL树保姆级详解:从平衡因子到四大旋转机制
java·c++·算法
jktantan4 小时前
每个节点 41 字节:把一棵百万节点树拆进 14 个 typed array
前端·javascript·vue.js·算法·typescript
揽星河..4 小时前
【C语言】猜数字游戏
c语言·算法·游戏
frjc5 小时前
分布式服务拆分实战指南:从底层逻辑到面试话术
微服务·面试·职场和发展
LabVIEW开发5 小时前
CTM-3 红外测温仪 + LabVIEW 温度怎么测?
算法·labview·测试·labview程序