【发布时间】:2014-11-30 16:08:53
【问题描述】:
给定一个由 1 和 0 组成的数组,将数组分成几部分,使第一个数组中 1 的数量等于另一个数组中 0 的数量。打印出现此分区的索引。如果有很多这样的可能性,找到第一个这样的分区。
这里的示例代码在下面用 python 给出。它打印的答案是 7。这意味着第一个数组直到 a[7]。第二个数组从a[8] 开始直到结束。
这个算法工作得很好,但我认为复杂度是 O(n^2)。如果可能的话,我想要一个更好的解决方案。任何帮助都会很棒。
def findParts(arr):
length=len(arr)
count_ones = 0
count_zeros = 0
index=0
for index in range(length-1):
if arr[index] == 1:
count_ones+=1
for j in range(index+1, length-1):
if arr[j] == 0:
count_zeros+=1
if (count_ones-count_zeros == 0):
return index
else:
count_zeros=0;
a=[1,1,0,0,1,0,0,0,1,0,1,1,0,1,0,1,1]
print findParts(a)
【问题讨论】:
-
这是您使用的实际缩进吗?因为那是行不通的。
-
它为我返回 None !并且由于您没有嵌套订单是
O(n) -
@khelwood:不。:) 在 stackoverflow 中格式化对我来说是个问题。我只是确保它看起来不错。
标签: python arrays algorithm optimization partitioning