代码随想录Day58——739. 每日温度 496.下一个更大元素 I

2023-12-21 12:23:38

739. 每日温度

给定一个整数数组?temperatures?,表示每天的温度,返回一个数组?answer?,其中?answer[i]?是指对于第?i?天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用?0?来代替。

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

496.下一个更大元素 I?

nums1?中数字?x?的?下一个更大元素?是指?x?在?nums2?中对应位置?右侧?的?第一个?比?x?大的元素。

给你两个?没有重复元素?的数组?nums1?和?nums2?,下标从?0?开始计数,其中nums1?是?nums2?的子集。

对于每个?0 <= i < nums1.length?,找出满足?nums1[i] == nums2[j]?的下标?j?,并且在?nums2?确定?nums2[j]?的?下一个更大元素?。如果不存在下一个更大元素,那么本次查询的答案是?-1?。

返回一个长度为?nums1.length?的数组?ans?作为答案,满足?ans[i]?是如上所述的?下一个更大元素?。

class Solution {
public:
    vector<int> nextGreaterElement(vector<int>& nums1, vector<int>& nums2) {
        stack<int> s;
        vector<int> result(nums1.size(),-1);
        unordered_map<int, int> umap;
        for (int i = 0; i < nums1.size(); i++) 
        {
            umap[nums1[i]] = i;
        }
        s.push(0);
        for(int i = 1;i<nums2.size();i++)
        {
            while(!s.empty()&&nums2[i]>nums2[s.top()])
            {
                if (umap.count(nums2[s.top()]) > 0) 
                { 
                    int index = umap[nums2[s.top()]]; 
                    result[index] = nums2[i];
                }
                s.pop();
            }
            s.push(i);
        }
        return result;
    }
};

文章来源:https://blog.csdn.net/cheng_dog/article/details/135124685
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。