算法12(力扣739)-每日温度

1、问题

     给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中

      answer[i] 是指对于第 i

      天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0

      来代替。

2、示例

(1)

      输入: temperatures = [73,74,75,71,69,72,76,73] <br />

      输出: [1,1,4,2,1,1,0,0]

(2)

      输入: temperatures = [30,40,50,60] <br />

      输出: [1,1,1,0]

3、实现思路

(1)理解题意

(2)思路:

        建立空数组用于存储,循环遍历,不符合条件的将索引压入栈(以便后面有符合条件的弹出,作为存储最终结果的索引),符合条件的,将栈顶元素(也就是需要替换结果的元素索引)弹出,用其作为最终结果的替换索引

t是temperatures数组,s是stk栈

4、具体步骤

(1) 空栈,存储数组 temperatures 的索引,res存储最终结果(先进行初始化,实现“

气温在这之后都不会升高,请在该位置用 0 来代替”)

(2)进入循环

        1)将不符合条件的数组压入栈,符合条件的弹出,然后将弹出元素的索引用于存储最终结果的索引
        2)条件怎么设?
                ①空栈stk不进入循环,因为没有可以进行比较的索引
                ②比较循环项i(最新项)和之前项进行比较,如果他的前一项刚好比他小(即后一个气温更高,将前一项的索引弹出,将这个索引用于更新最终结果res的值(相差几天(用该次循环i-弹出索引preIndex))),如果不比他小,将新的索引压入栈stk,然后再进行比较

(3)返回最终结果res

5、完整代码

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>每日温度</title></head><body><p>给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中answer[i] 是指对于第 i天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0来代替。</p><p>输入: temperatures = [73,74,75,71,69,72,76,73] <br />输出: [1,1,4,2,1,1,0,0]</p><p>输入: temperatures = [30,40,50,60] <br />输出: [1,1,1,0]</p><p>实现思路:遍历数组,通过indexOf获取当前索引,然后将当前值和索引传入函数,进行比较</p><script>let temperatures = [73, 74, 75, 71, 69, 72, 76, 73];dailyTemperatures(temperatures);function dailyTemperatures(temperatures) {// console.log(temperatures);// 空栈,存储数组 temperatures 的索引let stk = [];// 初始化数组初始值为0let res = new Array(temperatures.length).fill(0);for (let i = 0; i < temperatures.length; i++) {// 当栈不为空且当前温度 temperatures[i] 大于栈顶索引所指向的温度 temperatures[stk[stk.length - 1]] 时,进入循环while (stk.length > 0 &&temperatures[i] > temperatures[stk[stk.length - 1]]) {// 被弹出的元素索引let preIndex = stk.pop();// 相差值res[preIndex] = i - preIndex;}stk.push(i);}// console.log(res);return res;}</script></body>
</html>

6、力扣通过代码

var dailyTemperatures = function(temperatures) {// console.log(temperatures);// 空栈,存储数组 temperatures 的索引let stk = [];// 初始化数组初始值为0let res = new Array(temperatures.length).fill(0);for (let i = 0; i < temperatures.length; i++) {// 当栈不为空且当前温度 temperatures[i] 大于栈顶索引所指向的温度 temperatures[stk[stk.length - 1]] 时,进入循环while (stk.length > 0 &&temperatures[i] > temperatures[stk[stk.length - 1]]) {// 被弹出的元素索引let preIndex = stk.pop();// 相差值res[preIndex] = i - preIndex;}stk.push(i);}// console.log(res);return res;
};

7、超时代码(循环遍历其中各项,通过索引和当前值在内循环中变量比较,获取最终值,可以通过测试用例,但提交会超时,时间复杂度为O(n**2))

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>每日温度</title></head><body><p>给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中answer[i] 是指对于第 i天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0来代替。</p><p>输入: temperatures = [73,74,75,71,69,72,76,73] <br />输出: [1,1,4,2,1,1,0,0]</p><p>输入: temperatures = [30,40,50,60] <br />输出: [1,1,1,0]</p><p>实现思路:遍历数组,通过indexOf获取当前索引,然后将当前值和索引传入函数,进行比较</p><script>let temperatures = [73, 74, 75, 71, 69, 72, 76, 73];dailyTemperatures(temperatures);function dailyTemperatures(temperatures){}function dailyTemperatures(temperatures) {// console.log(temperatures);let arr = [];for (let i = 0; i < temperatures.length; i++) {let cur = temperatures[i];let res = checkIt(i, cur);//   console.log(res);arr.push(res);}console.log(arr);function checkIt(index, cur) {for (let j = index + 1; j < temperatures.length; j++) {if (cur < temperatures[j]) {let res = j - index;return res;}}return 0;}}</script></body>
</html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/69242.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STM32项目分享:智能厨房安全检测系统

目录 一、前言 二、项目简介 1.功能详解 2.主要器件 三、原理图设计 四、PCB硬件设计 PCB图 五、程序设计 六、实验效果 七、资料内容 项目分享 一、前言 项目成品图片&#xff1a; 哔哩哔哩视频链接&#xff1a; STM32智能厨房安全检测系统 &#xff08;资料分…

定时器按键tim_key模版

低优先级放在高优先级内势必是程序卡死 把高优先级放到低优先级内&#xff0c;会使程序卡死 可修改 Debuger调试方法 Pwm rcc #include "my_main.h" uint8_t led_sta0x10; char text[30]; void LED_Disp(uint8_t dsLED) {HAL_GPIO_WritePin(GPIOC,GPIO_PIN_All,GPI…

大模型-本地化部署调用--基于ollama+openWebUI+springBoot

大模型-本地化部署调用–基于ollamaopenWebUIspringBoot 前言 前段时间&#xff0c;啊&#xff0c;可能不是前段时间&#xff0c;过去的2024年吧&#xff0c;大模型这块的内容也是非常火的&#xff0c;各家巨头也开始卷大模型的研发。那么本人呢也在过去的一年中也是用到了一…

RV1126+FFMPEG推流项目源码

源码在我的gitee上面&#xff0c;感兴趣的可以自行了解 nullhttps://gitee.com/x-lan/rv126-ffmpeg-streaming-projecthttps://gitee.com/x-lan/rv126-ffmpeg-streaming-project

宏_wps_宏修改word中所有excel表格的格式_设置字体对齐格式_删除空行等

需求&#xff1a; 将word中所有excel表格的格式进行统一化&#xff0c;修改其中的数字类型为“宋体&#xff0c; 五号&#xff0c;右对齐&#xff0c; 不加粗&#xff0c;不倾斜”&#xff0c;其中的中文为“宋体&#xff0c; 五号&#xff0c; 不加粗&#xff0c;不倾斜” 数…

ServletOutputStream failed to write: Broken pipe

案发现场 问题&#xff1a; org.springframework.web.context.request.async.AsyncRequestNotUsableException: ServletOutputStream failed to write: Broken pipe org.springframework.web.context.request.async.AsyncRequestNotUsableException: ServletOutputStream …

CNN-BiLSTM卷积双向长短期记忆神经网络时间序列预测(Matlab完整源码和数据)

CNN-BiLSTM卷积双向长短期记忆神经网络时间序列预测&#xff08;Matlab完整源码和数据&#xff09; 目录 CNN-BiLSTM卷积双向长短期记忆神经网络时间序列预测&#xff08;Matlab完整源码和数据&#xff09;预测效果基本介绍 CNN-BiLSTM卷积双向长短期记忆神经网络时间序列预测一…

14-6-2C++STL的list

(一&#xff09;list对象的带参数构造 1.list&#xff08;elem);//构造函数将n个elem拷贝给本身 #include <iostream> #include <list> using namespace std; int main() { list<int> lst(3,7); list<int>::iterator it; for(itlst.begi…

[b01lers2020]Life on Mars1

打开题目页面如下 看了旁边的链接&#xff0c;也没有什么注入点&#xff0c;是正常的科普 利用burp suite抓包&#xff0c;发现传参 访问一下 http://5edaec92-dd87-4fec-b0e3-501ff24d3650.node5.buuoj.cn:81/query?searchtharsis_rise 接下来进行sql注入 方法一&#xf…

Linux的udev详解、安装和使用(dev下的设备每次开机的名称不固定怎么办?)

前言&#xff08;问题与需求&#xff09;&#xff1a; 在传统的devfs 1&#xff1a;设备映射的不确定&#xff1a;一个设备多次加载设备的设备文件可能不同&#xff0c;比如一个hub有可能是ttyUSB0或ttyUSB2或ttyUSB3 2&#xff1a;devfs没有足够的主辅设备号&#xff0c;当设…

Linux 内核中的 InfiniBand 核心模块:drivers/infiniband/core/device.c 分析

InfiniBand 是一种高性能、低延迟的网络互连技术,广泛应用于高性能计算(HPC)、数据中心和云计算等领域。Linux 内核中的 InfiniBand 子系统提供了对 InfiniBand 设备的支持,而 drivers/infiniband/core/device.c 文件则是 InfiniBand 核心模块的重要组成部分。本文将对 dev…

如何快速开发LabVIEW项目,成为LabVIEW开发的高手

发现了一篇多年前写的文章&#xff0c;转发到这里 如何快速开发LabVIEW项目&#xff0c;成为LabVIEW开发的高手。 如果您手里有LabVIEW项目&#xff0c;领导催的又很紧&#xff0c;该怎么办&#xff1f; 如果您公司规模小&#xff0c;就想把LabVIEW项目快速搞定&#xff0c;有什…

CodeForces 611:New Year and Domino ← 二维前缀和

【题目来源】 https://codeforces.com/contest/611/problem/C 【题目描述】 They say "years are like dominoes, tumbling one after the other". But would a year fit into a grid? I dont think so. Limak is a little polar bear who loves to play. He has r…

K8S中的数据存储之基本存储

基本存储类型 EmptyDir 描述&#xff1a;当 Pod 被调度到节点上时&#xff0c;Kubernetes 会为 Pod 创建一个空目录&#xff0c;所有在该 Pod 中的容器都可以访问这个目录。特点&#xff1a; 生命周期与 Pod 绑定&#xff0c;Pod 删除时&#xff0c;数据也会丢失。适用于临时…

如何移植ftp服务器到arm板子?

很多厂家提供的sdk&#xff0c;一般都不自带ftp服务器功能&#xff0c; 需要要发人员自己移植ftp服务器程序。 本文手把手教大家如何移植ftp server到arm板子。 环境 sdk&#xff1a;复旦微 Buildroot 2018.02.31. 解压 $ mkdir ~/vsftpd $ cp vsftpd-3.0.2.tar.gz ~/vs…

Alfresco Content Services docker自动化部署操作

Alfresco Content Services docker部署文档 前提条件 在开始之前&#xff0c;需要确保已经安装了 Docker 和 Docker Compose。Docker 用于创建和管理容器&#xff0c;Docker Compose 则用于定义和运行多容器的 Docker 应用。 步骤 1. 创建目录结构 首先&#xff0c;创建一个…

计算机网络 (61)移动IP

前言 移动IP&#xff08;Mobile IP&#xff09;是由Internet工程任务小组&#xff08;Internet Engineering Task Force&#xff0c;IETF&#xff09;提出的一个协议&#xff0c;旨在解决移动设备在不同网络间切换时的通信问题&#xff0c;确保移动设备可以在离开原有网络或子网…

嵌入式MCU面试笔记2

目录 串口通信 概论 原理 配置 HAL库代码 1. 初始化函数 2. 数据发送和接收函数 3. 中断和DMA函数 4. 中断服务函数 串口通信 概论 我们知道&#xff0c;通信桥接了两个设备之间的交流。一个经典的例子就是使用串口通信交换上位机和单片机之间的数据。 比较常见的串…

Charles 4.6.7 浏览器网络调试指南:流量过滤与分析(六)

1. 概述 在网络调试和优化过程中&#xff0c;Charles 不仅可以实现简单的网络抓包操作&#xff0c;还支持更高级的抓包技巧和流量分析功能。这些功能能够帮助开发者深入挖掘网络请求的细节&#xff0c;为复杂问题提供有效的解决方案。本文将重点讲解 Charles 的过滤规则、自定…

xss靶场

xss-labs下载地址&#xff1a;GitHub - do0dl3/xss-labs: xss 跨站漏洞平台 xss常见触发标签&#xff1a;XSS跨站脚本攻击实例与防御策略-CSDN博客 level-1 首先查看网页的源代码发现get传参的name的值test插入了html里头&#xff0c;还回显了payload的长度。 <!DOCTYPE …