javascript - JS:可以在迭代这个数组时使用哈希映射来跟踪吗?
问题描述
我正在尝试练习一些算法问题,但我很难找到解决这个问题的最佳方法。我显然可以嵌套 for 循环,但这似乎效率不高。我可以使用哈希映射来跟踪 temp 的 temp 和 index 吗?
给定一个每日温度列表,生成一个列表,在输入中的每一天,告诉你需要多少天才能等到温度升高。如果没有可能的未来日期,则输入 0。例如,给定温度列表 = [73, 74, 75, 71, 69, 72, 76, 73],您的输出应该是 [1, 1, 4, 2, 1, 1, 0, 0]。
解决方案
您可以为此使用几种不同的技巧。@PlatypusMaximus 试图将您指向一个在您从末尾迭代时有效的方法,但您也可以在向前迭代时这样做,我认为这样更容易理解:
当您遍历数组时,您会保留一个未分配“最近的温暖日”的索引列表。此列表最初为空。
对于每个元素,从列表中删除所有温度较低的索引,并将它们的“最接近温暖的一天”分配给当前索引。
当您到达最后时,列表中剩余的任何索引都没有“最近的温暖的一天”,并且得到 0。
诀窍是:每当您向列表中添加一个元素时,所有前面的元素都相等或更大。因此,索引列表仍按温度降序排列。在步骤(2)中,这意味着您只需要查看列表末尾的元素(您可以使用堆栈)而不是搜索它,结果是整个过程需要 O(N) 时间。
推荐阅读
- java - 在 Java 中传播所有异常是什么意思
- java - JavaX MIDI - 使用自定义声音字体播放 MIDI 文件
- php - 跳过函数的参数值
- angularjs - 如何在angularjs spring mvc中重定向页面
- ios - 如何减少 UITabBarItem 图像和文本之间的垂直填充?
- xslt - XSLT:如果结果为真,则匹配字段字符串,然后复制完整的相应节点
- excel - 如何搜索多个工作表?
- python - 每个组的值的出现计数作为单独的列
- spring - Weblogic 12.2.1.3.0 中忽略了 Spring 注释
- sql-server - 由于主键,无法删除表中的行