当前位置: 首页 > article >正文

数据结构与算法之栈: LeetCode 739. 每日温度 (Ts版)

每日温度

  • https://leetcode.cn/problems/daily-temperatures/description/

描述

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

示例 1

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

示例 2

输入: temperatures = [30,40,50,60]
输出: [1,1,1,0]

示例 3

输入: temperatures = [30,60,90]
输出: [1,1,0]

提示

  • 1 <= temperatures.length <= 1 0 5 10^5 105
  • 30 <= temperatures[i] <= 100

Typescript 版算法实现


1 ) 方案1:暴力

function dailyTemperatures(temperatures: number[]): number[] {
    const length = temperatures.length;
    const ans: number[] = new Array(length).fill(0);
    const next: number[] = new Array(101).fill(Number.MAX_SAFE_INTEGER);

    for (let i = length - 1; i >= 0; --i) {
        let warmerIndex = Number.MAX_SAFE_INTEGER;

        // 查找比当前温度高的最小索引
        for (let t = temperatures[i] + 1; t <= 100; ++t) {
            if (next[t] < warmerIndex) {
                warmerIndex = next[t];
            }
        }

        // 如果找到了比当前温度高的温度,计算天数差
        if (warmerIndex < Number.MAX_SAFE_INTEGER) {
            ans[i] = warmerIndex - i;
        }

        // 更新当前温度的最新索引
        next[temperatures[i]] = i;
    }

    return ans;
}

2 )方案2:单调栈

function dailyTemperatures(temperatures: number[]): number[] {
    const length = temperatures.length;
    const ans: number[] = new Array(length).fill(0);
    const stack: number[] = []; // 使用数组模拟栈

    for (let i = 0; i < length; i++) {
        const temperature = temperatures[i];

        // 当栈不为空且当前温度大于栈顶索引对应的温度时
        while (stack.length > 0 && temperature > temperatures[stack[stack.length - 1]]) {
            const prevIndex = stack.pop()!;
            ans[prevIndex] = i - prevIndex;
        }

        // 将当前索引压入栈中
        stack.push(i);
    }
    return ans;
}

http://www.kler.cn/a/525522.html

相关文章:

  • 【Leetcode刷题记录】166. 分数到小数
  • 安卓逆向之脱壳-认识一下动态加载 双亲委派(二)
  • EasyExcel写入和读取多个sheet
  • 实时数据处理与模型推理:利用 Spring AI 实现对数据的推理与分析
  • 深入理解Pytest中的Setup和Teardown
  • 新年快乐!给大家带来了一份 python 烟花代码!
  • 企业知识管理在推动组织变革与适应性发展中的关键性作用分析
  • NPM 使用介绍
  • 在业务高峰期更新 PostgreSQL 表结构(DDL)导致性能问题
  • Java线程认识和Object的一些方法
  • 分库分表 相关问题
  • 3.目录操作
  • 软件工程概论试题二
  • “深入浅出”系列之算法篇:(5)AIGC
  • 面试经典150题——图的广度优先搜索
  • 保姆级讲解 python之zip()方法实现矩阵行列转置
  • 【Leetcode 热题 100】32. 最长有效括号
  • 深入探讨:服务器如何响应前端请求及后端如何查看前端提交的数据
  • 大模型知识蒸馏技术(2)——蒸馏技术发展简史
  • vscode软件操作界面UI布局@各个功能区域划分及其名称称呼
  • 留学生scratch计算机haskell函数ocaml编程ruby语言prolog作业VB
  • Java实现.env文件读取敏感数据
  • Flutter 新春第一弹,Dart 宏功能推进暂停,后续专注定制数据处理支持
  • 【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】1.26 统计圣殿:从描述统计到推断检验
  • 安卓(android)订餐菜单【Android移动开发基础案例教程(第2版)黑马程序员】
  • arkts bridge使用示例