📅  最后修改于: 2023-12-03 14:50:48.575000             🧑  作者: Mango
题目描述: 给出一个长度为n的数组a[]。对于每个位置i(0 <= i < n),输出找到比a[i]大的第一个数字的距离(实际位置)和比a[i]小的第一个数字的距离。如果不存在这样的数字,输出-1。
对于数组中的每个位置,输出两个整数—— 左边和右边的距离,如果不存在更大/更小的数字,则输出-1。数字之间用", "分隔,每个输出放在一行上。
5
5 6 2 3 4
1, 0
2, 1
-1, 1
1, 1
2, -1
n = int(input())
a = list(map(int, input().split()))
def next_larger(right=True):
stack = []
ans = [-1] * n
for k in range(n) if right else reversed(range(n)):
while stack and a[stack[-1]] > a[k]:
x = stack.pop()
ans[x] = k - x
stack.append(k)
return ans if right else ans[::-1]
nxt_l = next_larger()
nxt_r = next_larger(right=False)
for i in range(n):
print(f'{nxt_l[i]}, {nxt_r[i]}')