1. 程式人生 > 其它 >將陣列分為和相等的三個部分

將陣列分為和相等的三個部分

一、題目

給你一個整數陣列 arr,只有可以將其劃分為三個和相等的 非空 部分時才返回 true,否則返回 false。

形式上,如果可以找出索引 i + 1 < j 且滿足 (arr[0] + arr[1] + ... + arr[i] == arr[i + 1] + arr[i + 2] + ... + arr[j - 1] == arr[j] + arr[j + 1] + ... + arr[arr.length - 1])

就可以將陣列三等分。

二、思路

1.首先計算陣列累加和,並求三分之一值

2.遍歷陣列,直到累加和三分之一值,統計組數

3.判斷是否三組

三、程式實現

/**
 * @param {number[]} arr
 * @return {boolean}
 */
var canThreePartsEqualSum = function(arr) {
//首先計算陣列累加和
let sum=arr.reduce((a,b)=>(a+b));
//計算三分之一
let three_sum=sum/3;
let temp=0;
let count=3;
//遍歷陣列,計算累加和
for(let i=0;i<arr.length;i++){
    temp=temp+arr[i];
    if(temp===three_sum){
        temp=0;
        count--;
    }
}
//判斷是否三組,如果小於0是三組以上,返回false
//等於0剛好三組,返回true
    return count<=0;  
};