检查堆栈的元素是否在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

  • 标志 := 真

  • 而温度的大小> 1,做

    • 标志 := 假

    • item_first, item_second := temp 的前两个元素并弹出它们

    • 如果 |item_first - item_second| 不是 1,那么

    • 将 item_first 和 item_second 推入 stk

    • 如果 temp 的大小与 1 相同,则

      • 将温度的顶部推入 stk

    • 返回标志

    让我们看看以下实现以获得更好的理解 -

    示例代码

    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

    猜你喜欢