思路很简单:
首先遍历数组,得到数组的累加和。在这期间记录数组的前n累加和。然后从后向前遍历数组,当累加和为累加和/3时,就遍历之前保存的累加和数组,如果有数值为数组累加和/3且其索引小于从后向前累加和的索引-1(因为要给中间的数组留下空间)则正确。
class Solution
{
public:
bool canThreePartsEqualSum(vector<int>& A)
{
int length=A.size();
int ahead[length]={0};
ahead[0]=A[0];
for(int i=1;i<length;i++)
{
ahead[i]=ahead[i-1]+A[i];
}
int sum=ahead[length-1];
int third=0;
if(sum%3!=0)
{
return false;
}
else
{
third=sum/3;
}
int aback[length+1]={0};
aback[length]=0;
for(int i=length-1;i>=0;i--)
{
aback[i]=aback[i+1]+A[i];
if(aback[i]==third)
{
for(int j=0;j<i-1;j++)
{
if(ahead[j]==third)
{
return true;
}
}
}
}
return false;
}
};