문제
N개의 정수로 구성된 비어 있지 않은 배열 A가 제공됩니다. 배열 A는 테이프의 숫자를 나타냅니다.
0 p P n N과 같은 정수 P는 이 테이프를 비어 있지 않은 두 부분으로 분할합니다. A[0], A[1], ..., A[P - 1] 및 A[P], A[P + 1], ..., A[N - 1].
두 부분의 차이는 다음과 같습니다. |(A[0] + A[1] + ... + A[P - 1] - (A[P] + A[P + 1] + ... + A[N - 1]|
즉, 첫 번째 부분의 합계와 두 번째 부분의 합계의 절대적인 차이입니다.
예를 들어 어레이 A는 다음과 같이 가정합니다.
A[0] = 3
A[1] = 1
A[2] = 2
A[3] = 4
A[4] = 3
이 테이프를 네 군데로 나눌 수 있습니다.
P = 1, 차이 = |3 - 10| = 7
P = 2, 차이 = |4 - 9| = 5
P = 3, 차이 = |6 - 7| = 1
P = 4, 차이 = |10 - 3| = 7
함수 쓰기:
용해(A)
즉, N개의 정수가 비어 있지 않은 배열 A에서 얻을 수 있는 최소 차이를 반환합니다.
예를 들어, 다음과 같습니다.
A[0] = 3
A[1] = 1
A[2] = 2
A[3] = 4
A[4] = 3
위에서 설명한 대로 함수는 1을 반환해야 합니다.
다음 가정에 대해 효율적인 알고리즘을 작성합니다.
N은 [2..] 범위의 정수입니다.100,000];
어레이 A의 각 요소는 [-1,000..1,000] 범위의 정수입니다.
코드
import sys
def solution(A):
#변수 숫자중 가장 큰 값으로 대입
min_number = sys.maxsize
left=0
right=sum(A)
for i in range(1, len(A)):
left=left+A[i-1]
right=right-A[i-1]
min_number=min(min_number,abs(left-right))
return min_number
예외처리