算法训练营day48(12.16)

题目1: 739. 每日温度
代码:

class Solution {
public:
    vector<int> dailyTemperatures(vector<int>& temperatures) {
        int n = temperatures.size();
        vector<int> result(n);
        stack<int> stk;
        for(int i = 0; i < n; i++) {
            while(!stk.empty() && temperatures[stk.top()] < temperatures[i]) {
                int pre = stk.top();
                result[pre] = i - pre;
                stk.pop();
            }
            stk.push(i);
        }
        return result;
    }
};

题目2: 496. 下一个更大元素 I

代码:

class Solution {
public:
    vector<int> nextGreaterElement(vector<int>& nums1, vector<int>& nums2) {
        int n1 = nums1.size(), n2 = nums2.size();
        vector<int> result(n1, -1);
        if(n1 == 0) return result;

        map<int, int> maps;
        for(int i = 0; i < n1; i++) maps[nums1[i]] = i;

        stack<int> stk;
        stk.push(0);
        for(int i = 1; i < n2; i++) {
            while(!stk.empty() && nums2[stk.top()] < nums2[i]) {
                if(maps.count(nums2[stk.top()]) > 0) {
                    int pre = maps[nums2[stk.top()]];
                    result[pre] = nums2[i];
                }
                stk.pop();
            }
            stk.push(i);
        }
        return result;

    }
};

题目3: 503. 下一个更大元素 II

代码:

class Solution {
public:
    vector<int> nextGreaterElements(vector<int>& nums) {
        int n = nums.size();
        vector<int> result(n, -1);
        stack<int> stk;
        for(int i = 0; i < 2 * n; i++) {
            while(!stk.empty() && nums[stk.top()] < nums[i % n]) {
                int pre = stk.top();
                result[pre] = nums[i % n];
                stk.pop();
            }
            stk.push(i % n);
        }
        return result;
    }
};
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容