1과 0의 배열이 주어지면 첫 번째 배열의 1의 수가 다른 배열의 0의 수와 같도록 배열을 부분으로 나눕니다. 이 파티션이 발생하는 색인을 인쇄하십시오. 그러한 가능성이 많으면 그러한 파티션 중 첫 번째 파티션을 찾으십시오.배열을 두 부분으로 나눕니다. 더 나은 해결책이 필요합니다
여기 예제 코드는 파이썬으로 제공됩니다. 대답은 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)
실제 들여 쓰기를 사용하고 있습니까? 그게 효과가 없을테니까. – khelwood
그것은 나를 위해 아무 것도 돌려주지 않습니다!주문에 대해 중첩되지 않았기 때문에'O (n)' – Kasramvd
@ khelwood : 아니요 :) stackoverflow에서 포맷팅이 문제였습니다. 나는 단지 그것이 잘 보였다고 확신했다. – spiralarchitect