C++ 中的最大坡度


假设我们有一个整数数组 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

为解决此问题,我们将遵循以下步骤

  • 创建一个数组 v,设置 n := 给定数组的大小,设置 ret := 0

  • 定义一个栈 st

  • 对于 i 在 0 到 n – 1 范围内的值

    • 如果 st 为空或栈顶部元素 > A[i],则将 i 插入 st

  • 对于 i := n – 1 到 ret + 1 向下

    • 当 st 不为空且栈顶部 <= A[i] 时

      • ret := ret 与 (i – 栈顶部) 中的最大值

      • 从 st 中删除

  • 从 st 中删除

让我们看看以下实现,以获得更好的理解

示例

 实时演示

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   int maxWidthRamp(vector<int>& A) {
      vector < pair <int, int> > v;
      int n = A.size();
      int ret = 0;
      stack <int> st;
      for(int i = 0; i < n; i++){
         if(st.empty() || A[st.top()] > A[i]){
            st.push(i);
         }
      }
      for(int i = n - 1; i > ret; i--){
         while(!st.empty() && A[st.top()] <= A[i]){
            ret = max(ret, i - st.top());
            st.pop();
         }
      }
      return ret;
   }
};
main(){
   vector<int> v1 = {6,0,8,2,1,5};
   Solution ob;
   cout << (ob.maxWidthRamp(v1));
}

输入

[6,0,8,2,1,5]

输出

4

更新日期:2020 年 4 月 30 日

331 次浏览

启动您的 职业

完成课程获得认证

开始
广告
© . All rights reserved.