美文网首页
leetcode每日一题 python解法 3月11日

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

作者: Never肥宅 | 来源:发表于2020-03-11 00:46 被阅读0次

    难度:简单

    题目内容:

    给你一个整数数组 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
    

    相关文章

      网友评论

          本文标题:leetcode每日一题 python解法 3月11日

          本文链接:https://www.haomeiwen.com/subject/hvpodhtx.html