Leetcode单调栈题目

文章目录

    • 单调栈
      • 496. 下一个更大元素I
      • 739. 每日温度
      • 316. 去除重复字母

以下为Datawhale Leetcode开源学习思路总结,以下代码均为Leetcode代码,但不一定是最优解,仅供参考学习。

单调栈

单调栈的介绍(参考链接)

496. 下一个更大元素I

我们通过单调栈对nums2进行遍历,同时使用unordered_map保存key对应下一个更大元素为value,建立map映射关系。那么我们就要分析单调栈进行入栈操作时,需要的条件是什么,我们的目的是找当前位置下一个更大的元素,因此单调栈的条件必然是stack.top() < nums2[i]时,我们将stacktop元素与当前的nums2[i]建立map结构保存,然后将栈顶top弹出,并将nums2[i]入栈。具体代码如下所示:

class Solution {
public:
    vector<int> nextGreaterElement(vector<int>& nums1, vector<int>& nums2) {
        unordered_map<int, int> next;
        stack<int> st;

        for (auto n: nums2) {
            while(!st.empty() && st.top() < n) {
                next[st.top()] = n;
                st.pop();
            }
            st.push(n);
        }

        vector<int> ans = vector<int>(nums1.size(), -1);

        for (int i = 0; i < nums1.size(); i++) {
            int n = nums1[i];
            if (next.count(n)) {
                ans[i] = next[n];
            }
        }

        return ans;
    }
};

(待补充)

739. 每日温度

316. 去除重复字母

你可能感兴趣的:(数据结构与算法,leetcode,算法,职场和发展)