题目:
给定一个整数数组 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.
提示:
2 <= A.length <= 50000
0 <= A[i] <= 50000
思路:
记下数组的元素的位置,然后进行排序,排序后某个元素所在的位置之前的肯定比在它前面的元素小,所以只要找出比它小的原标号最小的即可。
代码如下:
class Solution {
public:
struct data
{
int da;
int id;
};
static int compare (data aa,data bb)
{
if(aa.da!=bb.da)
return aa.da<bb.da;
return aa.id<bb.id;
}
int maxWidthRamp(vector<int>& A) {
data a[50005];
int ans=0;
for (int i=0;i<A.size();i++)
{
a[i].id=i;
a[i].da=A[i];
}
sort(a,a+A.size(),compare);
int t=a[0].id;
for (int i=1;i<A.size();i++)
{
ans=max(ans,a[i].id-t);
t=min(t,a[i].id);
}
return ans;
}
};