Leetcode 962. 最大寬度坡
阿新 • • 發佈:2018-12-31
題目:
給定一個整數陣列 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; } };