📅  最后修改于: 2023-12-03 15:23:04.242000             🧑  作者: Mango
这是一道计算机科学问题,出现在2017年国际空间研究组织(ISRO)的计算机科学考试中。这道问题是有关数组操作的。
给定一个长度为n的数组arr[],对于每个元素arr[i],需要找到它到数组中最接近它的左侧且比它小的元素。
输入的第一行包含一个整数T,表示测试用例的数量。每个测试用例的输入有两行。第一行包含一个整数n,表示数组的长度。第二行包含n个空格分隔的整数,表示数组arr[]。
对于每个测试用例,输出一行,包含n个空格分隔的整数,表示每个元素的答案。如果没有符合条件的元素,则输出-1。
输入:
2 4 1 3 2 4 5 1 2 3 4 5
输出:
-1 1 1 2 -1 -1 -1 -1 -1
我们可以使用栈来解决这个问题。我们首先初始化一个空栈stack[]。然后我们遍历数组arr[],对于每个元素arr[i],我们删除该栈内所有比arr[i]大的元素。然后,我们查看stack[]的栈顶元素,如果stack[]不为空且栈顶元素比arr[i]小,我们就打印该栈顶元素。最后,我们将arr[i]入栈到stack[]中。
def printPrevSmaller(arr, n):
S = []
for i in range(n):
while(len(S) > 0 and S[-1] >= arr[i]):
S.pop()
if(len(S) == 0):
print('-1', end = ' ')
else:
print(S[-1], end = ' ')
S.append(arr[i])
for _ in range(int(input())):
n = int(input())
arr = list(map(int,input().split()))
printPrevSmaller(arr, n)
print()
以上就是解决这个问题的完整Python代码。