思路:要分成和相等的三个部分,那有两种情况:一是所有数加起来不能被3整除,则可以直接return false;二是所有数加起来可以被3整除,那我们定义每部分的数key应等于sum/3,分成三个相等的部分,我们只需要砍两刀,定义两个指针,分别从左和右开始遍历,定义两个计数变量来储存左右两部分的值,当找到两个部分等于 key,那第三个部分一定也等于key,找到后return true
当左指针 + 1 >= 右指针,还没有return true,则return false,表示不能划分为三个相等的部分
Java实现:
class Solution {
public boolean canThreePartsEqualSum(int[] arr) {
int left = 0;
int right = arr.length - 1;
int sum = 0;
int leftSum = arr[left];
int rightSum = arr[right];
for(int i = 0;i < arr.length;i++){
sum += arr[i];
}
if(sum % 3 != 0){
return false;
}
int key = sum / 3;
while(left + 1 < right){
if(leftSum == key && rightSum == key){
return true;
}
if(leftSum != key){
left++;
leftSum += arr[left];
}
if(rightSum != key){
right--;
rightSum += arr[right];
}
}
return false;
}
}