问题链接 1013. Binary Prefix Divisible By 5
问题描述
给一个数组A,当且仅当我们能将它分成三份非空数组,且每个数组有着相同的值时返回true。
形式上, 我们能划分数组如果我们能找到 i+1 < j
且 (A[0] + A[1] + ... + A[i] == A[i+1] + A[i+2] + ... + A[j-1] == A[j] + A[j-1] + ... + A[A.length - 1])
样例
Input: [0,2,1,-6,6,-7,9,1,2,0,1] Output: true Explanation: 0 + 2 + 1 = -6 + 6 - 7 + 9 + 1 = 2 + 0 + 1
Input: [0,2,1,-6,6,7,9,-1,2,0,1] Output: false
Input: [3,3,6,5,-2,2,5,1,-9,4] Output: true Explanation: 3 + 3 = 6 = 5 - 2 + 2 + 5 + 1 - 9 + 4
先计算出数组的和,如果不能整除3则返回false。然后分别从两头进行查找,当找到最左端等于最右端且最左端等于数组和的三分之一时满足要求。
代码
bool* prefixesDivBy5(int* A, int ASize, int* returnSize){
*returnSize=ASize;
int res=A[0];
bool *ret = malloc(sizeof(bool)*ASize);
if(res%5==0)
ret[0]=true;
else
ret[0]=false;
for(int i=1;i<ASize;i++)
{
if(A[i]==0)
res*=2;
else
res=res*2+1;
if(res%5==0)
ret[i] =true;
else
ret[i] = false;
if(res>9)
res-=10;
}
return ret;
}