leetcode每日一题 python解法 3月11日

2020-03-11  本文已影响0人  Never肥宅

难度:简单

题目内容:

给你一个整数数组 A,只有可以将其划分为三个和相等的非空部分时才返回 true,否则返回 false。

形式上,如果可以找出索引 i+1 < j 且满足 (A[0] + A[1] + ... + A[i] == A[i+1] + A[i+2] + ... + A[j-1] == A[j] + A[j-1] + ... + A[A.length - 1]) 就可以将数组三等分。

示例 1:

输出:[0,2,1,-6,6,-7,9,1,2,0,1]
输出:true
解释:0 + 2 + 1 = -6 + 6 - 7 + 9 + 1 = 2 + 0 + 1
示例 2:

输入:[0,2,1,-6,6,7,9,-1,2,0,1]
输出:false
示例 3:

输入:[3,3,6,5,-2,2,5,1,-9,4]
输出:true
解释:3 + 3 = 6 = 5 - 2 + 2 + 5 + 1 - 9 + 4

提示:

3 <= A.length <= 50000
-10^4 <= A[i] <= 10^4

题解

既然能划分成三个和相等的部分,那么这个和肯定就是sum(list)/3
那就先求出这个和是多少,然后看能不能凑三组这个和,那怎么从一个列表里面找到和为n的k个数字咧?
正在我思考的时候突然发现题目中要求的是按顺序的三个部分,那就太简单了,直接一次循环搞定
不管我真是太蠢了好多边界条件都没有考虑到,错了好几次才一一补全,还好时间和内存过得去

image.png
class Solution:
    def canThreePartsEqualSum(self, A: List[int]) -> bool:
        s3 = sum(A)/3
        part = 0
        k = 0
        for i in range(3):
            s = s3
            for j in range(k,len(A)):
                s -= A[j]
                if s == 0:
                    break
            if not s == 0:
                return False
            if k >= len(A):
                break
            k = j + 1
            part += 1
        if  (part < 3):
            return False
        return True
上一篇下一篇

猜你喜欢

热点阅读