Python程式檢查是否可以堆疊積木


假設我們有一個數組nums,包含n個不同大小的積木,它們水平放置。我們需要垂直堆疊這些積木。新的積木必須遵循以下規則:

  • 如果第i個積木在第j個積木的頂部,則第j個積木的邊長必須大於或等於第i個積木的邊長。

堆疊時,我們只能從左側或右側取積木,不能從中間取。我們需要檢查是否可以將它們堆疊起來。

例如,如果輸入是nums = [1,2,3,7,8],則輸出為True,因為我們可以從右到左取積木來成功堆疊它們。

為了解決這個問題,我們將遵循以下步驟:

  • n := nums的大小
  • d := 從nums元素建立一個雙端佇列
  • flag := True
  • prev := 0
  • 當d不為空時,執行:
    • first := d[0]
    • last := d[n-1]
    • 如果prev不等於0且(first > prev 或 last > prev),則:
      • flag := False
      • 跳出迴圈
    • 如果first >= last,則:
      • prev := d的左側元素,並將其從d中刪除
    • 否則:
      • prev := d的右側元素,並將其從d中刪除
  • 如果flag為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

更新於:2021年10月12日

242 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告