假设我们有一个称为nums的数字列表。我们必须找到一个长度相同的新列表,其中索引i处的值分配给下一个大于其右边nums [i]的元素,并在需要时返回列表的最前面。如果没有更大的数字,则应将其设置为-1。
因此,如果输入类似于[4,5,1,3],那么输出将为[5,-1,3,4]
为了解决这个问题,我们将按照以下步骤操作:
n:=一个的大小
stack:=一个堆栈,最初插入0,res:=一个大小为n的列表,并以-1填充
对于范围0和1中的每个值,请执行
res [堆栈顶部]:= a [i]
从堆栈中删除最后一个元素
对于范围在0到n-1之间的i
当堆栈不为空且a [堆栈顶部] <a [i]时,执行
在堆栈末尾插入i
返回资源
让我们看下面的实现以更好地理解-
class Solution: def solve(self, a): n = len(a) stack, res = [0], [-1] * n for _ in range(2): for i in range(n): while stack and a[stack[-1]] < a[i]: res[stack[-1]] = a[i] stack.pop() stack.append(i) return res ob = Solution()nums = [4, 5, 1, 3] print(ob.solve(nums))
[4, 5, 1, 3]
输出结果
[5, -1, 3, 4]