单调栈

#算法

单调栈主要用于线性寻找某个元素后面或前面第一个比它大或者比它小的元素(朴素算法是O(N^2))

力扣相关题目

class Solution {
public:
    vector<int> finalPrices(vector<int>& nums) {
        int n = nums.size();
        vector<int>ans = nums, s;
        for (int i = n - 1;i >= 0;i--) {
            //单调栈核心:如果我比你小(或大)而且比你近,你就出栈
            while (s.size() && nums[s.back()] > nums[i])s.pop_back();
            //这样s.back()一定是最接近的而且比当前元素小(或大)的元素
            if (s.size())ans[i] -= nums[s.back()];
            s.push_back(i);
        }
        return ans;
    }
};


联系方式 - 如果你 喜欢 我的话~

GitHubbilibiliCSDN

ZHM