力扣第48天--- 第739题、第496题

# 力扣第48天— 第739题、第496题

文章目录

  • 一、第739题--每日温度
  • 二、第496题--下一个更大元素 I

一、第739题–每日温度

单调栈里放的是下标

适用场景:对于数组中某一元素,寻找右边/左边第一个大于或者小于这个元素的位置。

单调栈作用:存放之前遍历过的元素----存放下标

​ 要注意单调栈里的递增递减关系----栈顶到栈底的单调顺序,为后一个元素与前一个元素的关系一致。譬如,后一个比前一个大,那么栈顶到栈底就单调递增,栈顶是最小的。

不符合条件就进栈,符合条件就出栈。

class Solution {
public:
    vector dailyTemperatures(vector& temperatures) {
        stack st;
        vector result(temperatures.size(), 0);
        st.push(0);
        for(int i=1; i < temperatures.size(); ++i){
            if(temperatures[i] <= temperatures[st.top()]) st.push(i);
            else{
                while(!st.empty() && temperatures[i]> temperatures[st.top()]) {
                    result[st.top()] = i - st.top();
                    st.pop();
                }
                st.push(i);
            }
        }
        return result;
    }
};

二、第496题–下一个更大元素 I

​ 逻辑上,有点绕,有些综合,整体还行。

class Solution {
public:
    vector nextGreaterElement(vector& nums1, vector& nums2) {
        stack st;
        vector result(nums1.size(), -1);
        if(nums1.size() == 0) return result;
        
        unordered_map mymap;
        for (int i = 0; i nums2[st.top()]){
                    if (mymap.count(nums2[st.top()]) > 0) result[mymap[nums2[st.top()]]] = nums2[j];
                    st.pop();
                }
                st.push(j);
            }
        }
        return result;
    }
};

你可能感兴趣的:(leetcode,算法,职场和发展)