当前位置: 首页 > news >正文

代码随想录算法训练营Day47

章 单调栈part01

739. 每日温度

今天正式开始单调栈,这是单调栈一篇扫盲题目,也是经典题。

大家可以读题,思考暴力的解法,然后在看单调栈的解法。 就能感受出单调栈的巧妙

代码随想录

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

496.下一个更大元素 I

本题和 739. 每日温度 看似差不多,其实 有加了点难度。

代码随想录

暴力:

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

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;
    }
};

503.下一个更大元素II

这道题和 739. 每日温度 几乎如出一辙,可以自己尝试做一做

代码随想录

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

};

相关文章:

  • 爱彼(Audemars Piguet):瑞士制表艺术的巅峰之作(中英双语)
  • 使用Charles进行mock请求
  • 如何调整 Nginx工作进程数以提升性能
  • 华为ensp IPSEC隧道两端经过nat配置实验!
  • 【kafka系列】Exactly Once语义
  • DeepSeek进阶开发与应用2:DeepSeek中的自定义层与复杂模型构建
  • 【AI】Docker中快速部署Ollama并安装DeepSeek-R1模型: 一步步指南
  • SpringBoot教程(三十二) SpringBoot集成Skywalking链路跟踪
  • 如何优雅地使用全局标志位
  • servlet中的ServletContext
  • 【D2】神经网络初步学习
  • dfs深度优先搜索—邻接矩阵 + 邻接矩阵-递归版 + 邻接表
  • 基于Flask的茶叶销售数据可视化分析系统设计与实现
  • 一. vue2和vue3的Proxy底层源码详细拆解
  • Kepware的OPC UA配置深入介绍
  • C++ 中将类的定义和实现都放在头文件中的优缺点分析
  • 【20250215】二叉树:94.二叉树的中序遍历
  • 深入理解Elasticsearch集群与分片:原理及配置方案
  • 【硬件设计细节】缓冲驱动器使用注意事项
  • Springboot项目:使用MockMvc测试get和post接口(含单个和多个请求参数场景)
  • 人民日报仲音:大力纠治违规吃喝顽瘴痼疾
  • 习近平同巴西总统卢拉会谈
  • 外企聊营商|波音速度:创新审批促“起飞”
  • 世界期待中美对话合作带来更多确定性和稳定性
  • 科创板年内第3家!健信超导IPO获受理,拟募资8.65亿
  • 宁德时代港股募资预计最高至50亿美元:90%将投向匈牙利项目