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