leetcode 1013. 将数组分成和相等的三个部分

给你一个整数数组 A,只有可以将其划分为三个和相等的非空部分时才返回 true,否则返回 false。
形式上,如果可以找出索引 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]) 就可以将数组三等分。
来源:力扣(LeetCode)

比较简单的想法就是将所有数字相加,先判断是否能被3整除,不能则无法分割。可以整除,就顺序查找分割点,整个过程的时间复杂度为O(n)

public static boolean canThreePartsEqualSum(int[] A) {
        long sum=0;
        for(int num:A){
            sum+=num;
        }
        if(sum%3==1||sum%3==2){
            return false;
        }
        int i=0;
        long m=sum/3;
        long s1=A[i];
        while(++i<A.length&&s1!=m){
            s1+=A[i];
        }
        if(i>=A.length){
            return false;
        }
        long s2=A[i];
        while(++i<A.length&&s2!=m){
            s2+=A[i];
        }
        if(i>=A.length){
            return false;
        }
        return true;
    }
发布了47 篇原创文章 · 获赞 1 · 访问量 1587

猜你喜欢

转载自blog.csdn.net/chinamen1/article/details/104798245
今日推荐