将数组分为和相等的三个部分

一、题目

给你一个整数数组 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;  
};
posted @ 2022-05-18 22:04  花村店长  阅读(105)  评论(0)    收藏  举报