热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

LeetCode739:每日温度【哈希表+二分查找】

本题可以通过构建温度对应的哈希表来记录每个温度出现的索引,然后利用二分查找来快速找到比当前温度高的下一个温度的索引。

图片描述
图片描述

问题分析

直接暴力搜索的时间复杂度较高,因此需要寻找更高效的解决方案。观察到温度范围有限(0-100),可以使用哈希表来记录每个温度出现的索引。具体步骤如下:

  • 构建一个哈希表,键为温度值,值为该温度出现的所有索引列表。
  • 遍历温度数组,对于当前温度t,查找温度范围 [t + 1, 100] 中的所有温度对应的索引列表。
  • 使用二分查找在这些索引列表中找到比当前索引大的最小索引。
  • 计算并更新结果数组中的值。

代码实现

from collections import defaultdictfrom bisect import bisect_leftclass Solution:def dailyTemperatures(self, temperatures: List[int]) -> List[int]:tempDict = defaultdict(list)n = len(temperatures)for i, t in enumerate(temperatures):tempDict[t].append(i)ans = [0] * nfor i, t in enumerate(temperatures):smallIndex = float('inf')for biggerT in range(t + 1, 101):if tempDict[biggerT]:idx = bisect_left(tempDict[biggerT], i)if idx < len(tempDict[biggerT]):smallIndex = min(smallIndex, tempDict[biggerT][idx])if smallIndex != float('inf'):ans[i] = smallIndex - ireturn ans

总结

通过哈希表和二分查找相结合的方法,可以高效地解决每日温度问题。这种方法不仅适用于本题,还可以应用于其他类似的问题,如矩形包含点的计数等。在调试过程中,需要注意细节,例如正确使用范围函数 range(x, y) 而不是 (x, y)


推荐阅读
  • 本文详细介绍了Java中org.neo4j.helpers.collection.Iterators.single()方法的功能、使用场景及代码示例,帮助开发者更好地理解和应用该方法。 ... [详细]
  • Explore a common issue encountered when implementing an OAuth 1.0a API, specifically the inability to encode null objects and how to resolve it. ... [详细]
  • 本文介绍如何使用Objective-C结合dispatch库进行并发编程,以提高素数计数任务的效率。通过对比纯C代码与引入并发机制后的代码,展示dispatch库的强大功能。 ... [详细]
  • 本文基于刘洪波老师的《英文词根词缀精讲》,深入探讨了多个重要词根词缀的起源及其相关词汇,帮助读者更好地理解和记忆英语单词。 ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • 主要用了2个类来实现的,话不多说,直接看运行结果,然后在奉上源代码1.Index.javaimportjava.awt.Color;im ... [详细]
  • 本文详细介绍了Java中org.eclipse.ui.forms.widgets.ExpandableComposite类的addExpansionListener()方法,并提供了多个实际代码示例,帮助开发者更好地理解和使用该方法。这些示例来源于多个知名开源项目,具有很高的参考价值。 ... [详细]
  • 本文介绍如何使用 Python 编写程序,检查给定列表中的元素是否形成交替峰值模式。我们将探讨两种不同的方法来实现这一目标,并提供详细的代码示例。 ... [详细]
  • 本文介绍如何使用 Python 将一个字符串按照指定的行和元素分隔符进行两次拆分,最终将字符串转换为矩阵形式。通过两种不同的方法实现这一功能:一种是使用循环与 split() 方法,另一种是利用列表推导式。 ... [详细]
  • 本文介绍如何在 Android 中通过代码模拟用户的点击和滑动操作,包括参数说明、事件生成及处理逻辑。详细解析了视图(View)对象、坐标偏移量以及不同类型的滑动方式。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 本文详细介绍了如何在BackTrack 5中配置和启动SSH服务,确保其正常运行,并通过Windows系统成功连接。涵盖了必要的密钥生成步骤及常见问题解决方法。 ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • 本文介绍了一款用于自动化部署 Linux 服务的 Bash 脚本。该脚本不仅涵盖了基本的文件复制和目录创建,还处理了系统服务的配置和启动,确保在多种 Linux 发行版上都能顺利运行。 ... [详细]
author-avatar
凡秘能
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有