给你一个整数数组 A,只有可以将其划分为三个和相等的非空部分时才返回 true
,否则返回 false
s。
形式上,如果可以找出索引 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:
1 |
|
示例 2:
1 |
|
示例 3:
1 |
|
提示:
3 <= A.length <= 50000
-10^4 <= A[i] <= 10^4
思路
将数组分成和相等的三个部分,说明数组中元素的总和除以 3 就等于其中一部分元素之和。
使用一个巧妙的办法,定义一个 目标值 = 总和 / 3 ,和一个计数变量。每当遍历数组并且使数组元素相加时,所得到的和如果等于目标值,则计数 +1
。当计数量等于 3 时,返回 true
。
不过也有其他的案例,比如: [1, -1, 1, -1, 1, -1, 1, -1]
。 它的目标值为 0 ,计数会大于等于 3。因此,我们需要直接修改计数条件即可。
代码实现
1 |
|
1 |
|