1 class Solution(object): 2 def canThreePartsEqualSum(self, A: 'List[int]') -> bool: 3 n = len(A) 4 sums = sum(A) 5 if sums % 3 != 0: 6 return False 7 target = sums // 3 8 9 leftpart = 0 10 leftboundary = n -1 11 for i in range(n-2): 12 leftpart += A[i] 13 if leftpart == target: 14 leftboundary = i 15 break 16 17 rightpart = 0 18 rightboundary = 0 19 for j in range(n-1,1,-1): 20 rightpart += A[j] 21 if rightpart == target: 22 rightboundary = j 23 break 24 25 if leftboundary < rightboundary: 26 return True 27 return False
先判断数组之和是否是3的倍数,如果不是,那么不能三等分。
如果可以,先确定1/3的值,保存在变量target中。
从左向右逐项相加,找到第一组等于target的值的索引,记为i。
从右向左逐项相加,找到第一组等于target的值的索引,记为j。
如果i<j,则可以三等分。
时间复杂度O(n)(三次遍历),64ms,17.4MB。