用 Python 编写程序,查找右侧循环较大元素

pythonserver side programmingprogramming更新于 2026/1/9 5:00:17

假设我们有一个名为 nums 的数字列表。我们必须找到一个长度相同的新列表,其中索引 i 处的值被分配给其右侧下一个大于 nums[i] 的元素,并在需要时循环回到列表的前面。如果没有更大的数字,则应将其设置为 -1。

因此,如果输入为 [4, 5, 1, 3],则输出将为 [5, -1, 3, 4]

为了解决这个问题,我们将遵循以下步骤−

  • n := a 的大小

  • stack := 堆栈,最初插入 0,res := 大小为 n 的列表并填充 -1

  • 对于范围 0 和 1 中的每个值,执行

    • 对于范围 0 到 n-1 中的 i,执行

    • 当堆栈不为空且 a[堆栈顶部] < a[i],do

      • res[栈顶] := a[i]

      • 从栈中删除最后一个元素

    • 将 i 插入栈尾

  • 返回 res

让我们看看下面的实现以便更好地理解 −

示例

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]

相关文章


有用资源