首页 > 其他 > 详细

下一个更大元素 I

时间:2020-10-02 23:11:05      阅读:35      评论:0      收藏:0      [点我收藏+]

题目链接:下一个更大元素 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;
    }
};

下一个更大元素 I

原文:https://www.cnblogs.com/ManOK/p/13762732.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!