vector<int> nextGreaterElement(vector<int>& nums1, vector<int>& nums2) { stack<int> s; const int N =1e5; vector<int> ans; vector<int> v(N); int n=nums2.size(); s.push(nums2[n-1]); v[nums2[n-1]]=-1; for(int i=nums2.size()-2;i>=0;--i) { if(nums2[i]<(s.top())) { v[nums2[i]]=s.top(); s.push(nums2[i]); } else { while(!s.empty() && s.top()<nums2[i] )//order matters in && s.pop(); if(s.empty()) v[nums2[i]]=-1; else v[nums2[i]]=s.top(); s.push(nums2[i]); } } for(int j=0;j<nums1.size();++j) { ans.push_back(v[nums1[j]]); } return ans; }
Preview:
downloadDownload PNG
downloadDownload JPEG
downloadDownload SVG
Tip: You can change the style, width & colours of the snippet with the inspect tool before clicking Download!
Click to optimize width for Twitter