📅  最后修改于: 2023-12-03 14:50:18.126000             🧑  作者: Mango
给定一个只包含 0 和 1 的数组,你可以删除一对相邻的 0 和 1(可以删除 0 1 或者 1 0),使得剩余的数组中包含的 1 的个数最多,求剩余数组中 1 的个数。
对于这个问题,可以先将给定的数组存储为一个字符串,然后对该字符串进行操作。具体思路如下:
根据第一步的操作,可以想到使用两个指针,分别从头部和尾部开始向中间遍历,找到第一对相邻的 0 和 1;
根据第三步的操作,可以使用一个计数器,记录字符串中连续出现的 1 的个数。
具体实现见代码:
def max_len_of_ones(arr):
s = ''.join(map(str, arr))
count = s.count('1')
while True:
left, right = 0, len(s) - 1
found = False
while left < right:
if s[left] == '0' and s[right] == '1':
found = True
s = s[:left] + s[left+1:right] + s[right+1:]
break
elif s[left] == '1':
left += 1
elif s[right] == '0':
right -= 1
if not found:
break
cur_count = 0
max_count = 0
for i in range(len(s)):
if s[i] == '1':
cur_count += 1
else:
max_count = max(max_count, cur_count)
cur_count = 0
max_count = max(max_count, cur_count)
count = max(count, max_count)
return count
通过以下测试,可以检验代码的正确性:
assert max_len_of_ones([1, 0, 1, 1, 0, 1]) == 5
assert max_len_of_ones([1, 0, 1, 1, 0, 1, 0, 1]) == 5
assert max_len_of_ones([1, 0, 0, 1, 1, 0, 1]) == 4
assert max_len_of_ones([1, 0, 1, 1, 1, 0]) == 4
assert max_len_of_ones([1, 0]) == 1
assert max_len_of_ones([0, 1]) == 1
assert max_len_of_ones([0, 1, 0, 1]) == 1
assert max_len_of_ones([1, 1, 1, 1]) == 4
assert max_len_of_ones([0, 0, 0, 0]) == 0
assert max_len_of_ones([1, 1, 0, 1, 1]) == 4