首页 > 编程语言 >【算法训练营day58】LeetCode739. 每日温度 LeetCode496. 下一个更大元素

【算法训练营day58】LeetCode739. 每日温度 LeetCode496. 下一个更大元素

时间:2023-02-22 21:34:57浏览次数:54  
标签:vector top st day58 LeetCode739 LeetCode496 nums1 nums2 result

LeetCode739. 每日温度

题目链接:739. 每日温度

独上高楼,望尽天涯路

直接看题解。

慕然回首,灯火阑珊处

单调栈一般用来解决一维数组,任意一个元素的右边或者左边第一个比自己大或者小的元素。本质上是用空间换时间,用一个栈来记录我们遍历过的元素。

class Solution {
public:
    vector<int> dailyTemperatures(vector<int>& temperatures) {
        stack<int> st;
        vector<int> result(temperatures.size(), 0);
        for (int i = 0; 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;
    }
};

LeetCode496. 下一个更大元素

题目链接:496. 下一个更大元素

独上高楼,望尽天涯路

和上一道题很相似。

慕然回首,灯火阑珊处

和上一道题相比,思路是一样的,但是对代码能力要求更高,需要熟练使用单调栈和哈希表。

哈希表的作用就是查看nums2中的元素是否在nums1中出现过,如果出现过就返回其在nums1中的下标。

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

        unordered_map<int, int> umap; // key:下标元素,value:下标
        for (int i = 0; i < nums1.size(); i++) {
            umap[nums1[i]] = i;
        }
        st.push(0);
        for (int i = 1; i < nums2.size(); i++) {
            while (!st.empty() && nums2[i] > nums2[st.top()]) {
                if (umap.count(nums2[st.top()]) > 0) { // 看map里是否存在这个元素
                    int index = umap[nums2[st.top()]]; // 根据map找到nums2[st.top()] 在 nums1中的下标
                    result[index] = nums2[i];
                }
                st.pop();
            }
            st.push(i);
        }
        return result;
    }
};

标签:vector,top,st,day58,LeetCode739,LeetCode496,nums1,nums2,result
From: https://www.cnblogs.com/BarcelonaTong/p/17146020.html

相关文章

  • day58-计算属性
    计算属性姓名案例一个姓(输入框)一个名(输入框)一个姓名的汇总插值语法利用model属性,将firstname与lastname双向绑定在页面修改时也会在第三行汇总修改 <body>......
  • LeetCode739 每日温度
    LeetCode739每日温度classSolution:defdailyTemperatures(self,temperatures:List[int])->List[int]:ans,stack,n=[0]*len(temperatures),[......
  • leetcode496-下一个更大元素I——单调栈解决下一个更大元素问题
     https://leetcode.cn/problems/next-greater-element-i/方法一:暴力vector<int> res;int size1=nums1.size(),size2=nums2.size();        for(int i=0;......
  • python学习Day58
    Day58今日内容概要昨日作业讲解django请求生命周期流程图路由层系统路由匹配(不同版本的django有一点的区别)反向解析无名有名反向解析路由分发名称空间今......