题意理解
将一组整数分成三份,每份的和相等,返回是否存在这样的分法。
问题分析
求整个数组的和,如果能够被3整除,继续,否则,返回false。遍历一遍数组,统计等于和的三份之一的个数,如果等于3返回。
如果整个和是0,那么可以分成更多份。最后一步就是为了处理这个。
其他
链接
bool canThreePartsEqualSum(vector<int>& A) {
int sum = accumulate(A.begin(), A.end(), 0); //计算数组和
if (sum % 3 != 0) return false; //如果不能整除,返回false
int part = sum / 3; //计算每份的和
int cnt = 0; //计算份数
for(int i = 0, total = 0; i < A.size(); i ++) //统计每份和的个数
{
total += A[i];
if ( total == part)
{
cnt ++;
total = 0;
}
}
return cnt == 3; //等于3,返回true
}