检查是否能垒起方块的Python程序

检查是否能垒起方块的Python程序

假设我们有一个包含n个不同方块大小的数组nums,它们被水平放置。我们要垒起一个垂直的方块堆。新的方块应该满足以下条件:

  • 如果第i个方块在第j个方块上面,则第j个方块的侧面长度必须大于或等于第i个方块的侧面长度。

当我们垒起垂直堆时,我们只能从左边或右边取方块,而不能从中间取。我们必须检查我们能否将它们堆起来。

因此,如果输入为nums=[1,2,3,7,8],则输出为True,因为我们可以从右到左取出方块,成功地将它们垒起来。

为了解决这个问题,我们将按以下步骤进行-

  • n:=nums的大小
  • d:=从nums的元素制作一个双向队列
  • 标志:=True
  • prev:=0
  • 当d不为空时,执行以下操作
    • first:=d[0]
    • last:=d[n-1]
    • 如果prev不等于0且(first> prev或last> prev),那么
      • 标志:=False
      • 跳出循环
    • 如果first≥last,则
      • prev:=d的left item,并将其从d中删除
    • 否则,
      • prev:=d的last item,并将其从d中删除
  • 如果标志为True,则
    • 返回True
  • 否则,
    • 返回False

例子

看一下以下实现,以获得更好的理解

from collections import deque
def solve(nums):
    n = len(nums)
    d = deque(nums)
    flag = True
    prev = 0
    while d:
        first = d[0]
        last = d[-1]
        if prev != 0 and (first> prev or last> prev):
            flag = False
            break
        if first≥last:
            prev = d.popleft()
        else:
            prev = d.pop()
    if flag:
        return True
    else:
        return False

nums = [1,2,3,7,8]
print(solve(nums))

输入

[1,2,3,7,8]

输出

True

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程