LeetCode #1013. Partition Array Into Three Parts With Equal Sum

题目

1013. Partition Array Into Three Parts With Equal Sum


解题方法

首先计算数组总和,如果是3的倍数则继续计算平均值 avg = sum / 3,否则直接返回False。然后遍历数组做累加,累加值达到avg时重置,并计parts+1,表示找到一个部分。执行过程中当parts==2时,如果此时i没有到达结尾,则返回True,否则返回False,因为如果有剩余,那么它的和一定等于avg。
时间复杂度:O(n)
空间复杂度:O(1)


代码

class Solution:
    def canThreePartsEqualSum(self, A: List[int]) -> bool:
        avg = sum(A)
        if avg % 3:
            return False
        avg //= 3
        
        parts = 0
        tempsum = i = 0
        while i < len(A):
            tempsum += A[i]
            if tempsum == avg:
                parts += 1
                tempsum = 0
                if parts == 2:
                    if i == len(A) - 1:
                        return False
                    else:
                        return True
            i += 1
posted @ 2020-11-24 09:20  老鼠司令  阅读(67)  评论(0)    收藏  举报