将数组分为和相等的三个部分
一、题目
给你一个整数数组 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;
};

浙公网安备 33010602011771号