496. 下一个更大元素 I

496. 下一个更大元素 I_第1张图片

496. 下一个更大元素 I_第2张图片

class Solution {
public:
    vector nextGreaterElement(vector& nums1, vector& nums2) {

        // 存储numx2右侧第一个比它的元素数值
        std::unordered_map index;
        std::stack sta;
        for (int i = nums2.size()-1; i >= 0; --i) {
            // 维护一个单调递减的栈
            while (!sta.empty() && nums2[sta.top()] < nums2[i]) {
                sta.pop();
            }
            index[nums2[i]] = sta.empty() ? -1 : nums2[sta.top()];
            sta.push(i);
        }
        std::vector result(nums1.size());
        for (int i = 0; i < nums1.size(); ++i) {
            if (index[nums1[i]] > nums1[i]) {
                result[i] = index[nums1[i]];
            } else {
                result[i] = -1;
            }
        }
        return result;
    }
};

496. 下一个更大元素 I_第3张图片

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