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

代码随想录day48单调栈1

文章目录

  • 739. 每日温度
  • 496.下一个更大元素 I
  • 503.下一个更大元素II
    • 拓展求左边第一个最小的数

739. 每日温度

题目链接
题目链接

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

496.下一个更大元素 I

题目链接
文章讲解

暴力

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

哈希加单调栈

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

题目链接
文章讲解

class Solution {
public:vector<int> nextGreaterElements(vector<int>& nums) {int n=nums.size();vector<int> ans(n,-1);stack<int> stk;int max1=INT_MIN;for(int i=0;i<n;i++)max1=max(max1,nums[i]);int i=0;int cnt=0;while(1){while(!stk.empty()&&nums[i]>nums[stk.top()]){ans[stk.top()]=nums[i];stk.pop();}stk.push(i);i++;if(i==n) cnt++;i%=n;if(cnt==2) break;}return ans;}
};

如果想求右边第一个比它小的数 nums[i]>nums[stk.top()]改成nums[i]<nums[stk.top()]即可

拓展求左边第一个最小的数

如果想求左边第一个最小的数呢
求一个数左边第一个比他小的数

**加粗样式
**
求左边第一个比他大的也改一下符号即可

http://www.dtcms.com/a/302359.html

相关文章:

  • Python全栈项目--基于深度学习的视频内容分析系统
  • html转word下载
  • 【GitHub Workflows 基础(二)】深入理解 on、jobs、steps 的核心语法与执行逻辑
  • Dify快速搭建问答系统
  • 3、CC3200串口DMA
  • Binary Classifier Optimization for Large Language Model Alignment
  • 亚远景-“过度保守”还是“激进创新”?ISO/PAS 8800的99.9%安全阈值之争
  • Windows 11 系统 Docker详细安装教程并集成使用 Redis 官方详细教程
  • uniapp,uview icon加载太慢了,老是显示叉叉,将远程加载改到本地加载。
  • LangGraph实战:整合MCP(本地模式
  • 机器学习sklearn:不纯度与决策树构建
  • 数据中心入门学习(四):服务器概述与PCIe总线
  • 【学习笔记】AD7708/18(1)-理解官网的参考代码
  • python每日一题
  • 如何在 Apache Ignite 中创建和使用自定义 SQL 函数(Custom SQL Functions)
  • 生物信息学数据技能-学习系列001
  • 牛客网之华为机试题:坐标移动
  • 利用径向条形图探索华盛顿的徒步旅行
  • 数据分析干货| 衡石科技可视化创作之仪表盘控件如何设置
  • 开源智能体-JoyAgent集成ollama私有化模型
  • 【docker】DM8达梦数据库的docker-compose以及一些启动踩坑
  • 攻防世界-引导-Web_php_unserialize
  • Kafka单机如何多Broker实例集群搭建?
  • Python----大模型(基于Fastapi+gradio的对话机器人)
  • 降低焊接机器人保护气体消耗的措施
  • 递归算法的一些具体应用
  • 开发避坑短篇(6):Vue+window.print()打印实践
  • vue如何在data里使用this
  • android-屏幕-刷新流程
  • .NET AI从0开始入门 SemanticKernel 从基础到实践