【栈】Leetcode 739. 每日温度【中等】

embedded/2024/10/30 23:26:26/

每日温度

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

示例 1:

输入: temperatures = [73,74,75,71,69,72,76,73]
输出: [1,1,4,2,1,1,0,0]

解题思路

  • 1、使用单调栈来解决问题。
  • 2、遍历温度数组,对于每个温度:
  •  如果栈为空,则将当前索引入栈;
    
  •  如果当前温度大于栈顶温度,则出栈,并计算出栈温度对应的天数差值,并将结果存入结果数组;
    
  •  如果当前温度小于等于栈顶温度,则将当前索引入栈,继续遍历。
    
  • 3、遍历完成后,将栈中剩余元素对应的结果设置为0。

Java实现

public class DailyTemperatures {public int[] dailyTemperatures(int[] temperatures) {int n = temperatures.length;int[] answer = new int[n];Stack<Integer> stack = new Stack<>();for (int i = 0; i < n; i++) {//栈不为空且当前元素值大于栈顶元素,计算最大元素差值while (!stack.isEmpty() && temperatures[i] > temperatures[stack.peek()]) {int prevIndex = stack.pop();answer[prevIndex] = i - prevIndex;}//添加元素,下一个元素比较当前元素值stack.push(i);}return answer;}public static void main(String[] args) {DailyTemperatures solution = new DailyTemperatures();int[] temperatures = {73, 74, 75, 71, 69, 76,72,  73};int[] result = solution.dailyTemperatures(temperatures);System.out.print("Result: [");for (int i = 0; i < result.length; i++) {System.out.print(result[i]);if (i < result.length - 1) {System.out.print(", ");}}System.out.println("]");}
}

时间空间复杂度

  • 时间复杂度:O(n),其中n为温度数组temperatures的长度。因为需要遍历温度数组一次,并且每个元素最多入栈一次。

  • 空间复杂度:O(n),使用了一个额外的栈来存储温度数组的索引。


http://www.ppmy.cn/embedded/9382.html

相关文章

模块与包及json模块学习

【一】模块与包介绍 【1】什么是模块 在Python中&#xff0c;一个py文件其实就是一个模块 文件名 knight.py中 py就是模块名 【2】模块的优点 有了模块以后可以增加程序的可读性&#xff0c;提高开发效率 【3】模块的来源 &#xff08;1&#xff09;在Python解释器内部内…

宝塔手动安装grafana

1.下载 # 进入目标目录 cd /data/prometheus/ # 下载 wget https://dl.grafana.com/oss/release/grafana-8.0.4-1.x86_64.rpm # 安装 sudo yum install grafana-8.0.4-1.x86_64.rpm 2.运行项目 # 启动 /etc/init.d/grafana-server start 3.修改配置文件全局搜索 defaults.i…

MySQL数据库企业级开发技术(上篇)

使用语言 MySQL 使用工具 Navicat Premium 16 代码能力快速提升小方法&#xff0c;看完代码自己敲一遍&#xff0c;十分有用 拖动表名到查询文件中就可以直接把名字拉进来中括号&#xff0c;就代表可写可不写 目录 1.事务 1.1 需要事务的原因 1.2 事务介绍 1.2.1 事…

php原生简单应用实例(用户登录)

在PHP中实现用户登录功能通常涉及以下几个步骤: 创建数据库和用户表: 首先,你需要一个数据库来存储用户信息。通常,你会有一个用户表,其中包含用户名、密码(通常加密存储)和其他可能的信息,如电子邮件地址。 HTML登录表单: 创建一个HTML表单,让用户输入用户名和密码。…

MyBatis 框架学习(I)

MyBatis 框架学习(I) 文章目录 MyBatis 框架学习(I)1. 介绍2. 准备&测试3. MyBatis 注解基础操作3.1 日志输出3.2 Insert 操作3.3 Delete 操作3.4 Update 操作3.5 Select 操作 总结 1. 介绍 之前我们学习过利用JDBC操作数据库进行项目开发&#xff0c;但我们发现它操作起来…

必应搜索广告与谷歌搜索广告对比那个更好?

搜索引擎广告作为企业获取潜在客户的重要渠道之一&#xff0c;其效果直接关系到营销策略的成功与否。两大搜索引擎巨头——谷歌&#xff08;Google&#xff09;和必应&#xff08;Bing&#xff09;各自提供了广告平台&#xff0c;即谷歌广告&#xff08;Google Ads&#xff09;…

线性表的顺序存储如何设计实现?

如何存储 顺序及链式实现 计算机中的状态

NumPy:深度学习领域的强大工具

NumPy在深度学习领域是一个强大的工具&#xff0c;它主要用于数值计算、数组操作以及线性代数运算等。尽管深度学习框架&#xff08;如TensorFlow和PyTorch&#xff09;已经内置了这些功能&#xff0c;但在一些底层操作或数据处理任务中&#xff0c;NumPy仍然发挥着重要的作用。…