📅  最后修改于: 2023-12-03 15:42:19.752000             🧑  作者: Mango
给定一个二进制数组,元素为0或1,表示一排相邻的门,1表示门是打开的,0表示门是关闭的。当人通过某个门时,这个门会打开,如果该门已经打开,则它会再次关闭。任务是计算一个人可以通过所有门的最小步数。
输入: [1, 0, 0, 1, 0, 1, 1, 1]
输出: 9
我们可以用一个flag表示当前的门是否是打开的状态,最开始的门的状态为1(打开),然后遍历每个门,如果当前门的状态与flag相同,则说明需要进行一次开关,计数加1,同时更新flag的状态。代码实现如下:
def min_steps(arr):
count = 0
flag = 1
for i in arr:
if i != flag:
count += 1
flag = not flag
return count
时间复杂度为O(n),因为需要遍历整个数组一遍。