美文网首页
2020-03-11 刷题1(数组)

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

作者: nowherespyfly | 来源:发表于2020-03-12 12:54 被阅读0次

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

    相关文章

      网友评论

          本文标题:2020-03-11 刷题1(数组)

          本文链接:https://www.haomeiwen.com/subject/dadqjhtx.html