自学内容网 自学内容网

代码随想录算法训练营day48

1.每日温度

1.1 题目

https://leetcode.cn/problems/daily-temperatures/description/

1.2 题解

class Solution {
public:
    vector<int> dailyTemperatures(vector<int>& temperatures) 
    {
        vector<int> result(temperatures.size(), 0);
        stack<int> st;
        st.push(0);

        for (int i = 1; i < temperatures.size(); i++)
        {
            
            while (!st.empty()&&temperatures[i] > temperatures[st.top()])
            {
                result[st.top()] =  i-st.top();
                st.pop();
            }
            st.push(i);

        }
        return result;
    }
};

2.下一个更大元素

2.1 题目

https://leetcode.cn/problems/next-greater-element-i/

2.2 题解

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

        for (int i = 1; i < nums2.size(); i++)
        {
            while (!stc.empty() && nums2[i] > nums2[stc.top()])
            {
                if (umap.count(nums2[stc.top()]) > 0)
                {
                    int index = umap[nums2[stc.top()]];
                    result[index] = nums2[i];
                    

                }
                stc.pop();
            }
            stc.push(i);
        }
        return result;
    }
};

3.下一个更大元素II

3.1 题目

https://leetcode.cn/problems/next-greater-element-ii/description/

3.2 题解

class Solution {
public:
    vector<int> nextGreaterElements(vector<int>& nums) 
    {
        vector<int> tmp = nums;

        for (const auto& i : nums)
        {
            tmp.push_back(i);
        }

        vector<int> result(tmp.size(), -1);
        stack<int> st;
        st.push(0);
        for (int i = 1; i < tmp.size(); i++)
        {
            while (!st.empty() && tmp[i] > tmp[st.top()])
            {
                result[st.top()] = tmp[i];
                st.pop();
            }
            st.push(i);
        }
        result.resize(nums.size());
        return result;

    }
};
class Solution {
public:
    vector<int> nextGreaterElements(vector<int>& nums) 
    {
        vector<int> result(nums.size(), -1);
        stack<int> st;
        st.push(0);
        for (int i = 1; i < 2 * nums.size(); i++)
        {
            int j = i % nums.size();
            while (!st.empty() && nums[j] > nums[st.top()])
            {
                result[st.top()] = nums[j];
                st.pop();
            }
            st.push(j);
        }
        return result;

    }
};

原文地址:https://blog.csdn.net/qq_56445436/article/details/142682615

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!