📌  相关文章
📜  从二进制数组中相邻的0的左侧删除所有1(1)

📅  最后修改于: 2023-12-03 14:49:21.338000             🧑  作者: Mango

从二进制数组中相邻的0的左侧删除所有1

在二进制数组中,我们假设有相邻的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的方法。