• Leetcode962. Maximum Width最大宽度坡 Ramp


    给定一个整数数组 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.

    提示:

    1. 2 <= A.length <= 50000
    2. 0 <= A[i] <= 50000

    优化的暴力法,超时

    class Solution {
    public:
        int maxWidthRamp(vector<int>& A) 
        {
            int len = A.size();
            int MAX = 0;
            for(int i = 0; i < len && len - i > MAX; i++)
            {
                for(int j = len - 1; j > i && (j - i) > MAX; j--)
                {
                    if(A[j] >= A[i])
                    {
                        MAX = max(MAX, j - i);
                    }
                }
            }
            return MAX;
        }
    };

    用滑块超时

    class Solution {
    public:
        int maxWidthRamp(vector<int>& A) 
        {
            int len = A.size();
            int i = len - 1;
            while(i > 0)
            {
                int left = 0;
                int right = i;
                while(right < len)
                {
                    if(A[left] <= A[right])
                    {
                        return right - left;
                    }
                    else
                    {
                        left++;
                        right++;
                    }
                }
                i--;
            }
            return 0;
        }
    };

    终于过了:

    bool cmp(pair<int, int> x, pair<int, int> y)
    {
        if(x.first == y.first)
            return x.second < y.second;
        return x.first < y.first;
    }
    
    class Solution {
    public:
        int maxWidthRamp(vector<int>& A) 
        {
            int len = A.size();
            vector<pair<int, int> > ary;//val and pos
            for(int i = 0; i < len; i++)
            {
                ary.push_back(make_pair(A[i], i));
            }
            sort(ary.begin(), ary.end(), cmp);
            int MAX = 0;
            int left = ary[0].second;
            for(int i = 1; i < len; i++)
            {
                MAX = max(ary[i].second - left, MAX);
                left = min(left, ary[i].second);
            }
            return MAX;
        }
    };
    

  • 相关阅读:
    Kera高层API002
    Kera高层API
    手写数字问题实战(层)
    函数优化实战
    反向传播算法
    链式法则
    多输出感知机及其梯度
    JDBC
    mysql查询操作1
    内部类
  • 原文地址:https://www.cnblogs.com/lMonster81/p/10433775.html
Copyright © 2020-2023  润新知