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

leetcode_ 739 每日温度

1. 题意

给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0 来代替。

2. 题解

2.1 暴力

像枚举有序二元组一样,找到了就跳出循环。

class Solution {
public:vector<int> dailyTemperatures(vector<int>& temperatures) {int n = temperatures.size();vector<int> ans(n, 0);for (int i = 0;i < n - 1; ++i) {int mx = i;for (int j = i + 1;j < n; ++j) {if ( temperatures[j] > temperatures[mx]) {mx = j;break;}}ans[i] = mx - i;}return ans;}
};
2.2 单调栈

像这种左边第一个右边第一个这种问题都可以用单调栈来解决。

先说从左往右的写法。

维护一个单调非递减栈,当新加元素大于栈顶元素时,说明栈顶元素右边第一个大的元素就是当前元素。不断将小于当前元素的栈顶元素出栈,直到当前栈顶大于等于当前元素或者栈空,再将当前元素入栈。

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

再说从右往左的写法。

从右往左有一点不同的是对相同元素的处理,当两个元素相同时,靠近左边的元素会屏蔽右边的元素。因此从右往左的写法维护的是一个严格递减的单调栈。

我们从右往左遍历数组,当栈顶元素小于等于当前元素时,不断出栈。当栈顶元素大于当前元素时,说明当前元素右边第一个大于的元素就是栈顶元素。再将当前元素入栈。

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

3. 参考

0x3f

http://www.xdnf.cn/news/1308655.html

相关文章:

  • AI杀死的第一个仪式:“hello world”
  • C++设计模式:面向对象设计原则
  • B+树索引分析:单表最大存储记录数
  • Day2--滑动窗口与双指针--2090. 半径为 k 的子数组平均值,2379. 得到 K 个黑块的最少涂色次数,2841. 几乎唯一子数组的最大和
  • Windows 基于ACL(访问控制列表)的权限管理
  • Manus AI与多语言手写识别的技术突破与行业变革
  • 数学建模Topsis法笔记
  • 【php反序列化介绍与常见触发方法】
  • Bash常用操作总结
  • 9.从零开始写LINUX内核——设置中断描述符表
  • RK3568 NPU RKNN(五):RKNN-ToolKit-lite2板端推理
  • linux I2C核心、总线与设备驱动
  • Dify实战应用指南(上传需求稿生成测试用例)
  • 守护品质安全,防伪溯源系统打造全链路信任体系
  • MySQL异步连接池的学习(五)
  • 海康机器人3D相机的应用
  • Docker目录的迁移
  • OpenCV Python——图像拼接(一)(图像拼接原理、基础知识、单应性矩阵 + 图像变换 + 拼接)
  • Python爬虫实战:研究Scrapy Spiders ,构建豆瓣网电影数据分析处理系统
  • CSV 生成 Gantt 甘特图
  • aws(学习笔记第五十一课) ECS集中练习(3)
  • 初识c语言————宏定义和调用
  • Trae中`settings.json`文件的Java配置项功能详解(一)
  • 云原生俱乐部-RH124知识点总结(1)
  • 安卓11 12系统修改定制化_____列举与安卓 9、10 系统在定制化方面的差异与权限不同
  • 【科普向-第一篇】数字钥匙生态全景:手机厂商、车厂与协议之争
  • Flutter Provider 模式实现:基于 InheritedWidget 的状态管理实现
  • 矩阵链相乘的最少乘法次数(动态规划解法)
  • 开源 Arkts 鸿蒙应用 开发(十七)通讯--http多文件下载
  • bilibili视频总结