假设我们有一堆数字;我们必须检查堆栈中的值是否成对连续。这些对可以增加或减少。如果堆栈具有奇数个值,则顶部元素被排除在一对之外。并且我们应该在检查后保留原始堆栈内容。
为了解决这个问题,我们可以在栈上使用 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