📅  最后修改于: 2023-12-03 15:12:45.210000             🧑  作者: Mango
这是 Sudo GATE 2020 Mock III(2019 年 1 月 24 日)中的第 40 题,题目名称为 "门"。
有一个门,每次可以选择打开或关闭。门有一个初始状态,每次打开或关闭门时,状态会发生相应的改变。现在有一个长度为 n 的二进制数组 a_i,1<=i<=n,表示每次操作打开或关闭的门的位置。其中,a_i = 1 表示第 i 个门要打开,a_i = 0 表示第 i 个门要关闭。现在,你需要求出经过 n 次操作后,所有门的状态。其中,第 i 个门的初始状态为 0。
第一行,一个整数 n,表示二进制数组 a_i 的长度。 1<=n<=10^5 。
第二行,n 个正整数,表示二进制数组 a_i。
输出 n 个整数,表示所有门的最终状态。
3
1 1 0
1 1 0
初始状态为 0 0 0 ,第一次打开第一个门,状态变为 1 0 0 ,第二次打开第二个门,状态变为 1 1 0 ,最后关闭第三个门,状态变为 1 1 0 。
def door_status(n, arr):
"""
计算门的最终状态
:param n: int
:param arr: List[int]
:return: List[int]
"""
status = [0] * n
for i in range(n):
if arr[i] == 1:
for j in range(i, n):
status[j] ^= 1
return status
算法时间复杂度为 O(n^2)。