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

devtools/2024/10/25 18:26:21/

每日温度

给定一个整数数组 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/devtools/3954.html

相关文章

Android studio顶部‘app‘红叉- Moudle ‘XX.app’ dosen’t exist in project

Android studio顶部app红叉- Moudle ‘XX.app’ dosen’t exist in project 1、现象&#xff1a; 运行老项目或者有时候替换项目中的部分代码&#xff0c;明明没有错但是Android studio就编译报错了。 1.1 Android studio顶部app红叉。 1.2 点击Build没有clear菜单&#xff0…

git 快问快答

我在实习的时候&#xff0c;是用本地开发&#xff0c;然后 push 到 GitHub 上&#xff0c;之后再从 Linux 服务器上拉 GitHub 代码&#xff0c;然后就可以了。一般程序是在 Linux 服务器上执行的&#xff0c;我当时使用过用 Linux 提供的命令来进行简单的性能排查。 在面试的时…

使用socket client源码,调用addresstool地址关联算法

之前使用httpserver方式发布地址关联服务&#xff0c;发现每秒只能处理1800条地址&#xff0c;远远没有达到本地计算每秒1万条的速度&#xff0c;于是改变思路&#xff0c;使用socket发布服务。 这是客户端代码 直接上代码 package org.socket;import org.address.AddressTool…

c语言-快速排序

文章目录 代码工程运行结果 这个是升序排列&#xff0c;如果想降序排列,将下面两行的符号反过来即可; arr[right] < arr[key] arr[left] > arr[key]代码工程 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h>void swap(int *v1, int *v2) {int temp *v1;*v1 …

C++如何把图片转成base64数据

在C++中将图片转换为Base64格式涉及几个步骤,主要是读取图片文件的二进制数据,然后将这些数据编码为Base64字符串。这个过程通常需要用到额外的库来辅助完成,例如使用开源库如OpenSSL来进行Base64编码,以及使用标准库来处理文件输入输出。 下面提供一个基本的示例,展示如…

Linux:常用软件、工具和周边知识介绍

上次也是结束了权限相关的知识&#xff1a;Linux&#xff1a;权限相关知识详解 文章目录 1.yum-管理软件包的工具1.1基本介绍1.2yum的使用1.3yum的周边生态1.4软件包介绍 2.vim-多模式的文本编辑器2.1基本介绍2.2基本模式介绍2.2.1命令模式&#xff08;Normal mode&#xff09;…

3.SpringCloud版本

1.SpringCloud与SpringBoot之间版本对应 2.服务拆分的注意事项 1.不同微服务&#xff0c;不要重复开发相同业务。 2.微服务的数据独立&#xff0c;每个微服务都有自己独立的数据库&#xff0c;不要访问其他微服务的数据库。 3.微服务可以将自己的的业务暴露为接口&#xff…

密码学 | 数字签名方法:Schnorr 签名

⚠️原文&#xff1a;Introduction to Schnorr Signatures ⚠️写在前面&#xff1a;适用于有一点密码学基础的亲故&#xff0c;否则建议跑路。 1 Schnorr 签名的定义 假设你有密钥对 ( x , X x ∗ G ) ( x, X x * G ) (x,Xx∗G)&#xff0c;那么消息 m m m 的 Schnor…