热门标签 | 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)


推荐阅读
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社区 版权所有