1013 将数组分成和相等的三个部分
因为题目给了提示:

因为50000(-10^4) <= sum <= 5000010^4,不会溢出,所以可以放心求和除以3.
class Solution {
public:
bool canThreePartsEqualSum(vector<int>& A) {
int s = 0;
if(A.size() < 3) return false;
for(int i = 0; i < A.size(); i++)
s += A[i];
if(s % 3) return false;
s = s / 3;
int i = 1, si = A[0];
while(si != s && i < A.size()){
si += A[i++];
}
if(si != s) return false;
si = A[i++];
while(si != s && i < A.size() - 1){
si += A[i++];
}
if(si != s) return false;
return true;
}
};
几个可能出的问题:1)循环退出条件是求和等于s/3或者i越界,开始忽略了元素可能有负数,设成求和小于等于s/3了;2)先加上最新的元素,再判断是不是与s/3相等,因为有可能s/3就是等于0;第二次求和的退出条件是i < A.size() - 1,因为最后一组至少要有一个元素。
网友评论