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;
}
};
496. 下一个更大元素 I
最新推荐文章于 2024-07-06 07:39:36 发布