解题思路
首先用accumulate函数求出数组的总和,再得到每一段的和,之后利用双指针i和j,分别从数组的0和size-1开始寻找满足和为每一段的和的数组段,找到之后记录i和j的值,再求i和j中间的和,判断是否符合。
代码
class Solution {
public:
bool canThreePartsEqualSum(vector<int>& A) {
int sum=accumulate(A.begin(),A.end(),0);
if(sum%3!=0){return false;}
int every_sum=sum/3,sumi=0,sumj=0,summ=0;
int i=0,j=A.size()-1,flag=0;
while(i<j){
sumi+=A[i];
i++;
if(sumi==every_sum){
flag=1;
break;
}
}
if(flag==0){return false;}
flag=0;
while(j>i){
sumj+=A[j];
j--;
if(sumj==every_sum){
flag=1;
break;
}
}
if(flag==0){return false;}
while(i<=j){
summ+=A[i];
i++;
}
if(summ!=every_sum){return false;}
return true;
}
};
运行结果
points
- accumulate函数用法
- j的约定值,不是>0而是>i