lc962 最大宽度坡

给定数组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;
    }
};
posted @ 2024-03-17 10:30  chenfy27  阅读(4)  评论(0编辑  收藏  举报