
他向远方望去,无法看到高山背后的矮山,只看到一座座更高的山峰。
推荐先做做 数据结构题单 中的「枚举右,维护左」以及第三章「栈」的基础题目后,再来刷本题单。
原理讲解:单调栈【基础算法精讲 26】
模板:
def nearestGreater(nums: List[int]) -> Tuple[List[int], List[int]]:
n = len(nums)
# left[i] 是 nums[i] 左侧最近的严格大于 nums[i] 的数的下标,若不存在则为 -1
left = [-1] * n
st = []
for i, x in enumerate(nums):
while st and nums[st[-1]] <= x: # 如果求严格小于,改成 >=
st.pop()
if st:
left[i] = st[-1]
st.append(i)
# right[i] 是 nums[i] 右侧最近的严格大于 nums[i] 的数的下标,若不存在则为 n
right = [n] * n
st = []
for i in range(n - 1, -1, -1):
x = nums[i]
while st and nums[st[-1]] <= x:
st.pop()
if st:
right[i] = st[-1]
st.append(i)
return left, right思维扩展:
思维扩展:
欢迎关注 B站@灵茶山艾府
如果你发现有题目可以补充进来,欢迎评论反馈。