当前位置: 首页 > 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.dtcms.com/a/334375.html

相关文章:

  • 分享一个大数据的源码实现 基于Hadoop的二手车市场数据分析与可视化 基于Spark的懂车帝二手车交易数据可视化分析系统
  • Windows MCP.Net:革命性的 .NET Windows 桌面自动化 MCP 服务器
  • 嵌入式硬件篇---电容电感
  • 【C++】动态内存管理
  • 嵌入式硬件篇---电平转换电路
  • Python-深度学习(一)
  • Flutter开发 网络请求
  • Obot MCP 网关:用于安全管理 MCP 服务器采用的开源平台
  • DINOv3 论文精读(逐段解析)
  • 一文速通Python并行计算:14 Python异步编程-协程的管理和调度
  • CPP运算符优先级
  • 2508C++,支持rdma通信的高性能rpc库
  • 软件SPI实现(3):SPI协议测试(使用W25Q64)
  • Jenkins常见问题及解决方法
  • 计算机存储器分类和层次结构详解
  • 027 动静态库 —— 静态库
  • Docker数据卷挂载和本地目录挂载
  • 八、SpringBoot项目热部署
  • Java服务自动停止原因及查找方法
  • Cloudflare Tunnels 部署与隧道异常关闭的解决方案
  • 攻击者如何毒害人工智能工具和防御系统
  • 【更新公告】C++算法·线段树
  • CF每日3题(1500-1700)
  • 《WINDOWS 环境下32位汇编语言程序设计》第2章 准备编程环境
  • IO流-序列化流
  • 记录 GMS 认证相关条件
  • 玄机靶场 | 日志分析-Tomcat日志分析
  • AI生成视频开源模型技术解析
  • Rocky Linux 9.2:从 /home 分区释放 10G 空间扩容到 / 根分区
  • AI可行性分析:数据×算法×反馈=成功