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

代码随想录算法训练营第五十八天| 739 每日温度 496 下一个更大元素 |

目录

739 每日温度

496 下一个更大元素 |


739 每日温度

求后面第一个比他大的元素的位置,单调栈如果递增

求后面第一个比他小的元素的位置,单调栈需要递减

class Solution {
public:vector<int> dailyTemperatures(vector<int>& temperatures) {stack<int> st;//求的是后面第一个比他大的元素的位置,所以单调栈需要递增vector<int> res(temperatures.size(),0);//使得递增st.push(0);//存放temperatures的下标for(int i = 1;i < temperatures.size();i++){if(temperatures[i] <= temperatures[st.top()]){st.push(i);}else{while(!st.empty() && temperatures[i] > temperatures[st.top()]){//确保单调栈递增res[st.top()] = i - st.top();st.pop();}st.push(i);}}return res;}
};

时间复杂度O(n)

空间复杂度O(n) 

496 下一个更大元素 |

求后面第一个比他大的元素的位置,单调栈如果递增

求后面第一个比他小的元素的位置,单调栈需要递减

class Solution {
public:vector<int> nextGreaterElement(vector<int>& nums1, vector<int>& nums2) {stack<int>st;vector<int>res(nums1.size(),-1);unordered_map<int,int>mp;for(int i = 0;i < nums1.size();i++){//key:下标元素 value:下标mp[nums1[i]] = i;//将nums1中的数据存放到mp中}st.push(0);//存放下标for(int i = 1;i < nums2.size();i++){if(nums2[i] <= nums2[st.top()]){//求后面第一个比他大的元素的位置,单调栈如果递增st.push(i);}else{//确保单调栈单调递增while(!st.empty() && nums2[i] > nums2[st.top()]){//找到自己的位置才停止if(mp.count(nums2[st.top()]) > 0){//nums1中存在这个元素int idx = mp[nums2[st.top()]];res[idx] = nums2[i];}st.pop();}st.push(i);}}return res;}
};

时间复杂度O(m+n)//m是nums1的长度,n是nums2的长度

空间复杂度O(n) 

http://www.lryc.cn/news/265054.html

相关文章:

  • 配置自定义RedisTemplate 解决redis序列化java8 LocalDateTime
  • 华为---登录USG6000V防火墙---console、web、telnet、ssh方式登录
  • css图片属性,图片自适应
  • 【Python百宝箱】数据科学的黄金三角:数据挖掘和聚类
  • 【数据结构和算法】最大连续1的个数 III
  • AngularJS
  • 初级数据结构(七)——二叉树
  • 对比学习综述
  • R语言【cli】——cli_warn可以更便捷的在控制台输出警告信息
  • 从零开始创建GPTs 人人都可以编写自己的ChatGPT产品
  • 人工智能对网络安全的影响
  • 鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之TextInput输入框组件
  • 【C++入门到精通】互斥锁 (Mutex) C++11 [ C++入门 ]
  • 安全狗云原生安全-云甲·云原生容器安全管理系统
  • Python 学习路线:介绍、基础语法、数据结构、算法、高级主题、框架及异步编程详解
  • 基于Java+SpringBoot+Mybaties-plus+Vue+ElementUI+Vant 电影院订票管理系统 的设计与实现
  • 轻量级购物小程序H5产品设计经典样例
  • final, finally, finalize 的区别?
  • 4.使用 Blazor 构建 Web 应用程序
  • CentOS操作学习(二)
  • OpenCV技术应用(9)— 视频的暂停播放和继续播放
  • C#时间戳转换
  • Postgresql源码(118)elog/ereport报错跳转功能分析
  • Python Selenium中的强大等待设置详解
  • ACL实现固定时间访问资源——项目
  • 前端学习——关于前端框架的思考
  • 大创项目推荐 深度学习+opencv+python实现车道线检测 - 自动驾驶
  • Linux(二)常用命令
  • PHP通过mailer发送邮箱
  • c# OpenCV 基本绘画(直线、椭圆、矩形、圆、多边形、文本)(四)