欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 会展 > leetcode刷题笔记|单调栈

leetcode刷题笔记|单调栈

2025/3/16 7:25:40 来源:https://blog.csdn.net/qq_51738832/article/details/146286401  浏览:    关键词:leetcode刷题笔记|单调栈
  • 什么时候用单调栈?
    • 通常是一维数组,要寻找任一个元素的右边或者左边第一个比自己大或者小的元素的位置,此时我们就要想到可以用单调栈了。时间复杂度为O(n)。
  • 本质:单调栈的本质是空间换时间,因为在遍历的过程中需要用一个栈来记录右边第一个比当前元素高的元素,优点是整个数组只需要遍历一次。
  • 如果求一个元素右边第一个更大元素,单调栈就是递增的,如果求一个元素右边第一个更小元素,单调栈就是递减的。

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

  • 输入: temperatures = [73,74,75,71,69,72,76,73]
  • 输出: [1,1,4,2,1,1,0,0]
  • 思路:维护一个单调栈,栈中存放元素下标。从栈头到栈尾是递增的(栈头最小)(先入栈的元素更大:每来一个元素(即新来的元素是右边的元素),和栈头比较,如果大,就说明栈头元素找到了比他大的右边的元素,就把栈头pop出来)
  • 见视频讲解:卡哥视频讲解

class Solution:def dailyTemperatures(self, temperatures: List[int]) -> List[int]:answer = [0]*len(temperatures)stack = [0]for i in range(1,len(temperatures)):# 情况一和情况二if temperatures[i]<=temperatures[stack[-1]]:stack.append(i)# 情况三else:while len(stack) != 0 and temperatures[i]>temperatures[stack[-1]]:answer[stack[-1]]=i-stack[-1]stack.pop()stack.append(i)return answer# 精简版本:
class Solution:def dailyTemperatures(self, temperatures: List[int]) -> List[int]:answer = [0]*len(temperatures)stack = []for i in range(len(temperatures)):while len(stack)>0 and temperatures[i] > temperatures[stack[-1]]:answer[stack[-1]] = i - stack[-1]stack.pop()stack.append(i)return answer```

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词