下一个更大元素 I

题目链接:下一个更大元素 I

参考leetcode官方题解

我们可以忽略数组nums1,直接将nums2中的每个元素进行求解,求出其下一个更大的元素。利用map映射,将答案保存在“字典”中。随后便利nums2的子集(nums1),直接输出答案即可。

对于nums2,我们可以使用单调栈来解决这个问题

算法描述
首先压栈一个元素,保证栈非空

  1. 遍历数组nums2,对于每一个元素 element
    a. 如果 element > top,那么 element 就是 top 的下一个更大元素;(用map保存答案,出栈top元素)
    b. 如果 element <= top,我们仅仅将 element 进行进栈
  2. 在实际运用算法的过程中,我们针对每一个元素首选初始化答案为-1。之后根据 1 进行更新答案

AC代码

class Solution {
public:
    vector<int> nextGreaterElement(vector<int>& nums1, vector<int>& nums2) {
        unordered_map<int,int> ans;
        stack<int> st;
        for(auto val : nums2){
            
            ans[val] = -1;  //默认情况
            while(!st.empty() && val > st.top()){
                int num = st.top();
                ans[num] = val;
                st.pop();
            }
            st.push(val);
        }
        vector<int> res;
        for(auto val : nums1){
            res.push_back(ans[val]);
        }
        return res;
    }
};
posted @ 2020-10-02 21:09  focusDing  阅读(93)  评论(0编辑  收藏  举报