leetcode【毎日の問題】行列を同じ三つの部分Javaに分けます。


問題を解く
整数配列Aをあげます。3つと等しい非空の部分に分割した時だけtrueに戻ります。そうでなければfalseに戻ります。
形式上、索引i+1<jを見つけて(A[0]+A[1]+A[i]==A[i+1]+A[i+1]+A[i+2]+A[j-1]==A[j]+A[J-1]+A[A.length-1]を満足させることができれば、配列を3等分することができます。
例1:
[0,2,1,-6,6,-7,9,1,2,0,1]true0 + 2 + 1 = -6 + 6 - 7 + 9 + 1 = 2 + 0 + 1
例2:
[0,2,1,-6,6,7,9,-1,2,0,1]false
例3:
[3,3,6,5,-2,2,5,1,-9,4]true3 + 3 = 6 = 5 - 2 + 2 + 5 + 1 - 9 + 4
考え方
先に求めてsumと更に遍歴して、1つの区間がsum/3に等しいとカウントします。最後のカウントは3以上です。
ここで注意すると、3以上の場合があります。例えば、[-1,1,-1,1,1]
もちろん、二重の針も簡単です。もう詳しく説明しなくてもいいです。
javaコード
package daily;


public class CanThreePartsEqualSum {

    public boolean canThreePartsEqualSum(int[] A) {
        int sum = 0;//  
        int tem = 0;//      
        int count = 0;//    sum/3   
        for (int num : A
        ) {
            sum += num;
        }
        if (sum % 3 != 0) {
            return false;
        }
        for (int num : A
        ) {
            tem += num;
            if (tem == sum / 3) {
                count++;
                tem = 0;
            }

        }
        return  count>=3;
    }


    public  static  void main (String [] args){
        CanThreePartsEqualSum canThreePartsEqualSum=new CanThreePartsEqualSum();
        int []A ={0,2,1,-6,6,-7,9,1,2,0,1};
        int []B={0,2,1,-6,6,7,9,-1,2,0,1};
        int []C={3,3,6,5,-2,2,5,1,-9,4};
        int[] test={18,12,-18,18,-19,-1,10,10};
        System.out.println( canThreePartsEqualSum.canThreePartsEqualSum(A));
        System.out.println( canThreePartsEqualSum.canThreePartsEqualSum(B));
        System.out.println( canThreePartsEqualSum.canThreePartsEqualSum(C));
        System.out.println(canThreePartsEqualSum.canThreePartsEqualSum(test));
    }
}
leetcodeの答えは全部私のgitにアップロードされました。