代码随想录算法训练营第58天|739 496

739 用stack来写 stack里面发index 不要放数值

重点在于 1.填写result数组不需要按顺序填写 根据index就可以 2.遍历的值比top小的话就放入stack 这样stack里面是一个递减数组 遍历的值只需和top比 如果比他大就pop 一直到把stack里面比新加入的值小的都pop完为止 这样stack里面还是递减数组

class Solution {
public:
    vector dailyTemperatures(vector& temperatures) {
        vector result(temperatures.size(), 0);
        stack stack;
        stack.push(0);//push in the first index in temperatures array
        for (int i=1; itemperatures[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了

代码随想录算法训练营第58天|739 496_第1张图片

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

你可能感兴趣的:(算法,leetcode,数据结构)