应用题-单调栈专题-下一个更大元素II

管理员
**如何方便的处理循环数组是一个难点。这种处理方式可以积累一下。** ```python class Solution: # 给定一个循环数组 nums ( nums[nums.length - 1] 的下一个元素是 nums[0] ),返回 nums 中每个元素的 下一个更大元素 。 # 数字 x 的 下一个更大的元素 是按数组遍历顺序,这个数字之后的第一个比它更大的数, # 这意味着你应该循环地搜索它的下一个更大的数。如果不存在,则输出 -1 。 def nextGreaterElements(self, nums: List[int]) -> List[int]: # 将循环数组nums -> nums + nums ( 可以看待成两个数组拼接处理 ) n = len( nums ) ans = [ -1 for _ in range( n ) ] st = [] for i in range( 2 * n ): idx = i % n val = nums[ idx ] # 下一个更大元素: 保证栈顶元素始终小于栈中元素 while st and val > nums[ st[ -1 ] ]: idx_ = st.pop() if ans[ idx_ ] == -1: # 避免重复赋值 ans[ idx_ ] = val st.append( idx ) return ans ```
评论 0

发表评论 取消回复

Shift+Enter 换行  ·  Enter 发送
还没有评论,来发表第一条吧