方法一:暴力法(timeout)
class Solution:
def canThreePartsEqualSum(self, A: List[int]) -> bool:
if not A:
return False
n = len(A)
for i in range(n-1):
for j in range(i+1,n-1):
sum1 = sum(A[k] for k in range(0,i+1))
sum2 = sum(A[k] for k in range(i+1, j+1))
sum3 = sum(A[k] for k in range(j+1, n))
if sum1 == sum2 and sum2 == sum3:
return True
return False
方法二:利用flag
class Solution:
def canThreePartsEqualSum(self, A: List[int]) -> bool:
if (not A):
return False
total=sum(A)
if total % 3 != 0:
return False
target = total // 3
flag = 0
n = len(A)
s = 0
for i in range(n):
s += A[i]
if s == target:
flag += 1
s = 0
if flag >= 3:
return True
else:
return False
方法三:
class Solution:
def canThreePartsEqualSum(self, A: List[int]) -> bool:
if (not A):
return False
total=sum(A)
if total % 3 != 0:
return False
target = total //3
n = len(A)
i = 0
cur = 0
while i < n:
cur += A[i]
if cur == target:
break
i += 1
if cur != target:
return False
j = i+1
while j<n-1:
cur += A[j]
if cur == target * 2:
return True
j += 1
return False