

- class Solution {
- public:
- vector<int> nextGreaterElement(vector<int>& nums1, vector<int>& nums2) {
-
- // 存储numx2右侧第一个比它的元素数值
- std::unordered_map<int, int> index;
- std::stack<int> sta;
- for (int i = nums2.size()-1; i >= 0; --i) {
- // 维护一个单调递减的栈
- while (!sta.empty() && nums2[sta.top()] < nums2[i]) {
- sta.pop();
- }
- index[nums2[i]] = sta.empty() ? -1 : nums2[sta.top()];
- sta.push(i);
- }
- std::vector<int> result(nums1.size());
- for (int i = 0; i < nums1.size(); ++i) {
- if (index[nums1[i]] > nums1[i]) {
- result[i] = index[nums1[i]];
- } else {
- result[i] = -1;
- }
- }
- return result;
- }
- };
