📅  最后修改于: 2023-12-03 14:58:04.252000             🧑  作者: Mango
给定一个二进制数组,我们需要通过删除三个连续且相邻的元素(也就是三元组),使得最终数组中只剩下一个元素。如果无法删除三元组,返回原数组。
对于每个二进制数组,我们可以从左到右扫描一遍,如果发现了逆序的 1,0,1
的三元组,那么我们就可以把这个三元组删除,即把前面的一个 1
和后面的一个 1
都去掉,留下中间的 0
。因为这样删除三元组后,如果仍然存在逆序的 1,0,1
的三元组,我们还可以继续删除,直到没有这样的三元组可以删除为止。
如果扫描结束后,没有任何三元组被删除,那么数组已经被缩减到只有一个元素了,直接返回即可。
def simplify_array(arr):
stack = []
for num in arr:
stack.append(num)
if len(stack) >= 3 and stack[-3:] == [1, 0, 1]:
stack.pop()
stack.pop()
stack.pop()
if len(stack) >= 3:
while stack[-3:] == [1, 0, 1]:
stack.pop()
stack.pop()
stack.pop()
if len(stack) == 1:
return stack[0]
else:
return arr
这道题目比较简单,通过扫描数组来删除逆序的三元组即可。需要注意的是,在删除三元组后,可能仍然存在逆序的三元组,因此需要循环删除直到没有这样的三元组为止。