116th LeetCode Weekly Contest Maximum Width Ramp

Posted 樱花落舞

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了116th LeetCode Weekly Contest Maximum Width Ramp相关的知识,希望对你有一定的参考价值。

Given an array A of integers, a ramp is a tuple (i, j) for which i < j and A[i] <= A[j].  The width of such a ramp is j - i.

Find the maximum width of a ramp in A.  If one doesn‘t exist, return 0.

 

Example 1:

Input: [6,0,8,2,1,5]
Output: 4
Explanation: 
The maximum width ramp is achieved at (i, j) = (1, 5): A[1] = 0 and A[5] = 5.

Example 2:

Input: [9,8,1,0,1,9,4,0,4,1]
Output: 7
Explanation: 
The maximum width ramp is achieved at (i, j) = (2, 9): A[2] = 1 and A[9] = 1.

 

Note:

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

题意在解释里说的很清楚了,就看怎么想。

首先保证后面的数字比前面的是大于等于关系,这个排序可以搞定,然后到这个数为止,前面数字的位置里最小的数是谁,减去就好了

struct P{
    int num;
    int pos;
}H[50002];
bool cmp(P a,P b){
    if(a.num == b.num){
        return a.pos<b.pos;
    }else{
        return a.num<b.num;
    }
}
class Solution {
public:

    int maxWidthRamp(vector<int>& A) {
        int len = A.size();
        for(int i=0;i<len;i++){
            H[i].num = A[i];
            H[i].pos = i;
        }
        sort(H,H+len,cmp);
        int Min = H[0].pos;
        int sum = -1;
        int cum = 0;
        for(int i=1;i<len;i++){
            //cout<<H[i].pos<<" "<<Min<<endl;
            if(Min > H[i].pos){
                Min = H[i].pos;
            }else{
                
                cum = H[i].pos - Min;
                sum = max(sum,cum);
            }
            
        }
        if(sum == -1){
            sum = 0;
        }
        return sum;
    }
};

 

以上是关于116th LeetCode Weekly Contest Maximum Width Ramp的主要内容,如果未能解决你的问题,请参考以下文章

123th LeetCode Weekly Contest Broken Calculator

118th LeetCode Weekly Contest Pancake Sorting

113th LeetCode Weekly Contest Flip Equivalent Binary Trees

108th LeetCode Weekly Contest Minimum Falling Path Sum

113th LeetCode Weekly Contest Reveal Cards In Increasing Order

113th LeetCode Weekly Contest Largest Time for Given Digits