由于两个数组均没有重复元素,第一个数组是第二个数组的子数组,因此可以将第二个数组用单调栈处理,然后将结果存入hashmap中,然后再遍历一遍第一个数组找答案。
class Solution {
public:
vector<int> nextGreaterElements(vector<int>& nums) {
int n = nums.size();
nums.insert(nums.end(),nums.begin(),nums.end());
vector<int> res(n);
stack<int> st;
for(int i=2*n-1;i>=0;i--){
int x = nums[i];
while(!st.empty()&&x>=st.top()) st.pop();
if(i<n){
if(st.empty()) res[i] = -1;
else{
res[i] = st.top();
}
}
st.push(nums[i]);
}
return res;
}
};