检查是否能垒起方块的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