📅  最后修改于: 2023-12-03 14:49:21.338000             🧑  作者: Mango
在二进制数组中,我们假设有相邻的0出现在某一位置的左侧,那么该位置左侧的所有1都应该被删除。例如,[1,0,0,1,1,0,1,0]将变为[0,0,1,1,0],因为[1,0,0]中左侧的所有1都被删除了。
为了解决这个问题,我们可以定义一个指针,该指针将指向最后一个出现0的位置。我们使用这个指针来遍历数组,并删除相邻0的左侧的所有1。
代码如下:
def deleteOnes(arr:List[int])->List[int]:
pointer = -1
for i in range(len(arr)):
if arr[i] == 0:
pointer = i
elif pointer != -1:
arr[i] = 0
return arr[:pointer+1]
在这个代码里,我们首先定义了一个指针 pointer
,初始值为-1。然后我们遍历输入的数组 arr
,如果当前位置是0,那么我们更新指针的位置。如果不是0,并且指针已经被更新了(即指针不为-1),那么我们将当前位置的元素设为0。最后,我们返回指针位置左侧的所有元素。
这个算法的时间复杂度为O(n),因为我们只需遍历整个数组一次。空间复杂度也是O(n),因为我们需要额外使用一个数组来存储删除后的内容。
以上就是从二进制数组中相邻的0的左侧删除所有1的方法。