首先判断数组所有元素之和能否被3整除,不能则返回false;
所有元素之和/3就是我们3个子数组的目标和,因此定义左、右索引,从数组开头和结尾分别遍历数组,直到子数组和等于目标值时终止。
判断左、右索引的大小关系,若l>r,说明不存在中间子数组或不能找到满足条件的左、右子数组,返回false,否则为true。
class Solution {
public boolean canThreePartsEqualSum(int[] A) {
int sum=0;
for(int i=0; i<A.length; i++){
sum += A[i];
}
if(sum%3 != 0){
return false;
}
int target = sum/3;
int l=1;
int lsum=A[0];
int r=A.length-2;
int rsum=A[A.length-1];
while(lsum != target && l<A.length){
lsum += A[l];
l++;
}
while(rsum != target && r>=0){
rsum += A[r];
r--;
}
return l<=r;
}
}