2020-03-11 刷题1(数组)

2020-03-12  本文已影响0人  nowherespyfly

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,因为最后一组至少要有一个元素。

上一篇下一篇

猜你喜欢

热点阅读