本文最后更新于589 天前,其中的信息可能已经过时,如有错误请发送邮件到tomding1065@gmail.com
1.本题是上一个题的套壳题目就是单调栈的题,本题其实难点在于不知道怎么处理nums1和nums2之间的关系,就是在nums2里找到属于nums1的元素我们要怎么定位到在nums1里的下标来存放利用单调栈所求出的该元素右边一个大于该元素的值,所以第一个操作就是用一个map将nums1里的key:元素和values:下标存起来,这样到时候就可以在单调栈里面遍历nums2的时候找到元素之后在map找到对应在nums1里的元素的下标,将这个右边第一个大于该元素的值存在这个下标处,除了比较繁琐以及数组的含义,还是要自己厘清每一个容器代表的含义以及要对于单调栈里面的操作要更加熟练。
CPP
class Solution {
public:
vector<int> nextGreaterElement(vector<int>& nums1, vector<int>& nums2) {
stack<int> st;
vector<int> res(nums1.size(), -1);
unordered_map<int,int> umap;
st.push(0);
for(int i = 0; i < nums1.size(); i++)umap[nums1[i]] = i;
for(int i = 1; i < nums2.size(); i++){
if(nums2[i] <= nums2[st.top()]){
st.push(i);
}else{
while(!st.empty() && nums2[i] > nums2[st.top()]){
if(umap.count(nums2[st.top()]) > 0){
res[umap[nums2[st.top()]]] = nums2[i];
}
st.pop();
}
st.push(i);
}
}
return res;
}
};