Day58 单调栈part01 739. 每日温度 496. 下一个更大元素 I

Day58 单调栈part01 739. 每日温度 496. 下一个更大元素 I

739. 每日温度

暴力法用例超时

class Solution {
public:
    vector<int> dailyTemperatures(vector<int>& temperatures) {
        vector<int> answer(temperatures.size(),0);
        for(int i = 0; i<temperatures.size();i++){
            int curAnswer = 0;
            for(int j =i;j<temperatures.size();j++){
                if(temperatures[j]>temperatures[i]) {
                    curAnswer=j-i;
                    break;
                }
            }
            answer[i] = curAnswer;
        }
        return answer;
    }
};

单调栈方法

class Solution {
public:
    vector<int> dailyTemperatures(vector<int>& temperatures) {
        vector<int> answer(temperatures.size(),0);
        stack<int> stk;
        stk.push(0); //首先放入零下标,方便从1下表开始比较
        for(int i = 1;i<temperatures.size();i++){
            if(temperatures[i]<=temperatures[stk.top()]) stk.push(i); //一旦小于等于单调栈栈顶元素,直接放入push进去
            else {
                while(!stk.empty()&&temperatures[i]>temperatures[stk.top()]){
                    answer[stk.top()] = i - stk.top();
                    stk.pop();
                }
                stk.push(i);//最后别忘了,出现元素小于等于栈顶元素,接着入栈
            }
        }
        return answer;
    }
};

496. 下一个更大元素 I

class Solution {
public:
    vector<int> nextGreaterElement(vector<int>& nums1, vector<int>& nums2) {
        stack<int> stk;
        vector<int> result(nums1.size(),-1);
        stk.push(0);
        unordered_map<int,int> mp;
        for(int i =0; i<nums1.size();i++){
            mp[nums1[i]] = i;
        }

        for(int i = 1; i<nums2.size();i++){
            if(nums2[i] <= nums2[stk.top()]) stk.push(i);
            else{
                while(!stk.empty() && nums2[i] > nums2[stk.top()]){
                    if(mp.find(nums2[stk.top()])!=mp.end()){
                        int index = mp[nums2[stk.top()]];
                        result[index] = nums2[i];
                    }
                    stk.pop();
                }
                stk.push(i);
            }
        }
        return result;
    }
};

你可能感兴趣的:(代码随想录刷题,动态规划,算法,leetcode,c++,数据结构)