-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathLesson3-Tape-Equilibrium.py
58 lines (54 loc) · 1.56 KB
/
Lesson3-Tape-Equilibrium.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# A non-empty array A consisting of N integers is given. Array A represents numbers on a tape.
#
# Any integer P, such that 0 < P < N,
# splits this tape into two non-empty parts: A[0], A[1], ..., A[P − 1] and A[P], A[P + 1], ..., A[N − 1].
#
# The difference between the two parts is the value of:
# |(A[0] + A[1] + ... + A[P − 1]) − (A[P] + A[P + 1] + ... + A[N − 1])|
#
# In other words, it is the absolute difference between the sum of the first part and the sum of the second part.
#
# For example, consider array A such that:
#
# A[0] = 3
# A[1] = 1
# A[2] = 2
# A[3] = 4
# A[4] = 3
# We can split this tape in four places:
#
# P = 1, difference = |3 − 10| = 7
# P = 2, difference = |4 − 9| = 5
# P = 3, difference = |6 − 7| = 1
# P = 4, difference = |10 − 3| = 7
# Write a function:
#
# def solution(A)
#
# that, given a non-empty array A of N integers, returns the minimal difference that can be achieved.
#
# For example, given:
#
# A[0] = 3
# A[1] = 1
# A[2] = 2
# A[3] = 4
# A[4] = 3
# the function should return 1, as explained above.
#
# Write an efficient algorithm for the following assumptions:
#
# N is an integer within the range [2..100,000];
# each element of array A is an integer within the range [−1,000..1,000].
def solution(A):
# write your code in Python 3.6
left = 0
minimal = None
right = sum(A)
for P in range(0, len(A)-1):
left += A[P]
right -= A[P]
diff = abs(left - right)
if minimal is None or diff < minimal:
minimal = diff
return minimal