LeetCode第 496 题:下一个更大元素 I (C++)

496. 下一个更大元素 I - 力扣(LeetCode)

简单题,方法很多

先写一个利用unordered_map的,使用了泛型算法以及lamba表达式

class Solution {
public:
    vector nextGreaterElement(vector& nums1, vector& nums2) {
        unordered_map 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 vec;
        for(const auto &c : nums1){
            vec.push_back(map[c]);
        }
        return vec;
    }
};

这个题目有栈的标签,所以用栈(单调栈)也能解,不需要用泛型算法:

class Solution {
public:
    vector nextGreaterElement(vector& nums1, vector& nums2) {
        unordered_map map;
        stack stk;
       
        for(auto it = nums2.begin();  it != nums2.end(); ++it){
            while(!stk.empty() && *it > stk.top()){
                    map[stk.top()] = *it;
                    stk.pop(); 
            }
            stk.push(*it);
        }
        while(!stk.empty()){
            map[stk.top()] = -1;
            stk.pop();
        }
        vector vec;
        for(const auto &c : nums1){
            vec.push_back(map[c]);
        }
        return vec;
    }
};

你可能感兴趣的:(leetcode,leetcode,数据结构)