下一个更大元素 I
题目链接:下一个更大元素 I
参考leetcode官方题解
我们可以忽略数组nums1,直接将nums2中的每个元素进行求解,求出其下一个更大的元素。利用map映射,将答案保存在“字典”中。随后便利nums2的子集(nums1),直接输出答案即可。
对于nums2,我们可以使用单调栈来解决这个问题
算法描述
首先压栈一个元素,保证栈非空
- 遍历数组nums2,对于每一个元素 element
a. 如果 element > top,那么 element 就是 top 的下一个更大元素;(用map保存答案,出栈top元素)
b. 如果 element <= top,我们仅仅将 element 进行进栈 - 在实际运用算法的过程中,我们针对每一个元素首选初始化答案为-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;
}
};