给定数组A[n],如果i<j,并且A[i]<=A[j],则称坡的宽度为j-i。求A中坡的最大宽度,如果不存在,返回0。
2<=n<=50000; 0<=A[i]<=50000
二维偏序问题,先按元素值排序去掉一维,将符合条件的元素加入集合,然后在集合中根据第二维找最优答案。
class Solution {
public:
int maxWidthRamp(vector<int>& nums) {
int n = nums.size();
vector<pair<int,int>> vp(n);
for (int i = 0; i < n; i++) {
vp[i] = {nums[i], i};
}
sort(vp.begin(), vp.end());
int ans = 0;
set<int> st;
for (int i = 0; i < n; i++) {
auto it = st.begin();
if (it != st.end() && *it < vp[i].second) {
ans = max(ans, vp[i].second - *it);
}
st.insert(vp[i].second);
}
return ans;
}
};
标签:lc962,最大,nums,int,st,vp,second,宽度,ans
From: https://www.cnblogs.com/chenfy27/p/18078238