496. 下一个更大元素 I - 力扣(LeetCode)
简单题,方法很多
先写一个利用unordered_map的,使用了泛型算法以及lamba表达式
class Solution { public: vector<int> nextGreaterElement(vector<int>& nums1, vector<int>& nums2) { unordered_map<int, int> map; for(auto it = nums2.begin(); it != nums2.end(); ++it){ auto iter = find_if(it + 1, nums2.end(), [it](int tmp){return tmp > *it;}); map[*it] = (iter == nums2.end()) ? -1 : *iter; } vector<int> vec; for(const auto &c : nums1){ vec.push_back(map[c]); } return vec; } };这个题目有栈的标签,所以用栈(单调栈)也能解,不需要用泛型算法:
class Solution { public: vector<int> nextGreaterElement(vector<int>& nums1, vector<int>& nums2) { stack<int> stk; unordered_map<int, int> m; for (int i = nums2.size() - 1; i >= 0; --i) { while(!stk.empty() && stk.top() <= nums2[i]) stk.pop(); m[nums2[i]] = stk.empty() ? -1 : stk.top(); stk.push(nums2[i]); } vector<int> res; for (int i = 0; i < nums1.size(); ++i) res.push_back(m[nums1[i]]); return res; } };