算法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;各家巨头也开始卷大模型的研发。那么本人呢也在过去的一年中也是用到了一…

Vue组件开发-使用 html2canvas 和 jspdf 库实现PDF文件导出 设置页面大小及方向

在 Vue 项目中实现导出 PDF 文件、调整文件页面大小和页面方向的功能&#xff0c;使用 html2canvas 将 HTML 内容转换为图片&#xff0c;再使用 jspdf 把图片添加到 PDF 文件中。以下是详细的实现步骤和代码示例&#xff1a; 步骤 1&#xff1a;安装依赖 首先&#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…

Docker 系列之 docker-compose 容器编排详解

文章目录 前言一、Docker-compose简介二、Docker-compose 的安装三、Docker-compose卸载四、Docker-compose常用命令4.1 Docker-compose命令格式4.2 docker-compose up4.3 docker-compose ps4.4 docker-compose stop4.5 docker-compose -h4.6 docker-compose down4.7 docker-co…

React第二十五章(受控组件/非受控组件)

React 受控组件理解和应用 React 受控组件 受控组件一般是指表单元素&#xff0c;表单的数据由React的 State 管理&#xff0c;更新数据时&#xff0c;需要手动调用setState()方法&#xff0c;更新数据。因为React没有类似于Vue的v-model&#xff0c;所以需要自己实现绑定事件…

转换算术表达式

文章目录 构造二叉树表示的算术表达式&#xff1a;按先序次序输入二叉树中结点的值(操作数及运算符均以一位字符表示&#xff0c;注意转换)&#xff0c; #字符表示空树&#xff0c;如上图的算术表达式 输入2##*3##4## 输入格式 第一行输入表示要计算的算术表达式的二叉树结点的…

[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;有什…

Zookeeper(27)Zookeeper的CAP理论是什么?

CAP 理论&#xff0c;又称为 Brewer 定理&#xff0c;是分布式系统设计中的一个基本定理。CAP 代表一致性&#xff08;Consistency&#xff09;、可用性&#xff08;Availability&#xff09;和分区容忍性&#xff08;Partition Tolerance&#xff09;。该理论指出&#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…

数组

数组 栈区的空间很有限&#xff0c;静态区的空间大些&#xff0c;一般在静态区去申请较大的空间 考虑特例能不能归并到一起也很重要 在二维数组中&#xff0c;基于范围的 for 循环直接遍历的是行&#xff0c;而不是单个元素 对于一个 int arr[3][4] 的二维数组&#xff0c; m…

网易Android开发面试题200道及参考答案 (下)

说明原码、反码、补码的概念 原码:是一种简单的机器数表示法。对于有符号数,最高位为符号位,0 表示正数,1 表示负数,其余位表示数值的绝对值。比如,对于 8 位二进制数,+5 的原码是 00000101,-5 的原码是 10000101。原码的优点是直观,容易理解,但在进行加减法运算时,…