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