知识点

单调栈

思路

题意是寻找右边第一个比当前值大的数,这可以用单调栈维护,时间复杂度为O(n)

AC code (C++)

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param weights int整型vector 
     * @return int整型vector
     */
    vector<int> weightGrowth(vector<int>& weights) {
        // 单调栈
        int n = weights.size();
        vector<int> r(n, -1);
        stack<int> stk;
        for (int i = n - 1; i >= 0; i --) {
            while (stk.size() and weights[stk.top()] <= weights[i]) stk.pop();
            if (!stk.empty()) r[i] = (stk.top() - i);
            stk.push(i);
        }
        return r;
    }
};