739 用stack来写 stack里面发index 不要放数值
重点在于 1.填写result数组不需要按顺序填写 根据index就可以 2.遍历的值比top小的话就放入stack 这样stack里面是一个递减数组 遍历的值只需和top比 如果比他大就pop 一直到把stack里面比新加入的值小的都pop完为止 这样stack里面还是递减数组
class Solution {
public:
    vector<int> dailyTemperatures(vector<int>& temperatures) {
        vector<int> result(temperatures.size(), 0);
        stack<int> stack;
        stack.push(0);//push in the first index in temperatures array
        for (int i=1; i<temperatures.size(); i++) {
            if (temperatures[i]<=temperatures[stack.top()]) stack.push(i);
            else {
                while (!stack.empty() && temperatures[i]>temperatures[stack.top()]) {
                    result[stack.top()]=i-stack.top();
                    stack.pop();
                }
                stack.push(i);
            }
        }
        return result;
    }
}; 
496 这道题写了超久 很容易很容易有小bug
思路上还是遍历nums2用单调栈来找出每个元素对应的下一个更大的值是几 但填入result vector的时候不能根据栈里面(nums2的下标)来填 而应该根据nums2里面的值找他在nums1里面的下标(此处用map来找) 根据这个下标来填写下一个更大的值就是最后要的result vector了

class Solution {
public:
    vector<int> nextGreaterElement(vector<int>& nums1, vector<int>& nums2) {
        unordered_map<int, int> umap;
        for (int i=0; i<nums1.size(); i++) {
            umap[nums1[i]]=i;
        }
        stack<int> stack;
        stack.push(0);
        vector<int> result(nums1.size(), -1);
        for (int i=1; i<nums2.size(); i++) {
            if (nums2[i]<=nums2[stack.top()]) stack.push(i);
            else {
                while (!stack.empty() && nums2[i]>nums2[stack.top()]) {
                    if (umap.find(nums2[stack.top()])!=umap.end()) {
                        result[umap[nums2[stack.top()]]]=nums2[i];
                    }
                    stack.pop();
                }
                stack.push(i);
            }
        }
        return result;
    }
}; 
                


















