檢查Python棧中的元素是否成對排序


假設我們有一個數字棧;我們必須檢查棧中的值是否成對連續。這些對可以是遞增或遞減的。如果棧有奇數個值,則頂部元素將被排除在對之外。並且我們應該在檢查後保留原始棧內容。

為了解決這個問題,我們可以在棧上使用三個操作,稱為push、pop和檢查棧是否為空。

因此,如果輸入類似於stk = [5, 6, -4, -5, 12, 11, 6, 7, 22],則輸出將為True,因為在刪除頂部元素22後,對為[(5, 6), (-4, -5), (12, 11), (6, 7)],所有這些都是連續的。

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

  • temp := 從stk中彈出元素並推入temp
  • 清空棧stk
  • flag := True
  • 當temp的大小> 1時,執行以下操作:
    • item_first, item_second := temp的頂部兩個元素並彈出它們
    • 如果|item_first - item_second|不等於1,則
      • flag := False
    • 將item_first和item_second推入stk
  • 如果temp的大小等於1,則
    • 將temp的頂部推入stk
  • 返回flag

讓我們看看下面的實現,以便更好地理解:

示例程式碼

線上演示

def solve(stk):
   temp = stk[::-1]
   stk.clear()
 
   flag = True
   while len(temp) > 1: 
      item_first = temp[-1] 
      temp.pop() 
      item_second = temp[-1] 
      temp.pop() 
      if abs(item_first - item_second) != 1: 
         flag = False
 
      stk.append(item_first) 
      stk.append(item_second)
 
    if len(temp) == 1: 
      stk.append(temp[-1]) 
 
   return flag
   
stk = [5, 6, -4, -5, 12, 11, 6, 7, 22]
print(solve(stk))

輸入

[5, 6, -4, -5, 12, 11, 6, 7, 22]

輸出

True

更新於: 2021年1月15日

245次瀏覽

開啟你的職業生涯

透過完成課程獲得認證

立即開始
廣告

© . All rights reserved.