【剑指offer】 将数组分成和相等的三个部分
题目
给你一个整数数组 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]) 就可以将数组三等分。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/partition-array-into-three-parts-with-equal-sum
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
我的答案
/**
* @param {number[]} arr
* @return {boolean}
*/
var canThreePartsEqualSum = function (arr) {
let result = arr.reduce((res, item) => {
return res + item
}, 0);
if ((result / 3) !== parseInt(result / 3)) {
return false;
}
result = result / 3;
let tempAns = 0;
let count = 0;
for (let num of arr) {
tempAns += num;
if (tempAns === result) {
count++;
tempAns = 0;
}
}
return count>=3;
};
这道题比较坑的就是计算可成功次数三次以上的才算对,因为有0的情况。
标题:【剑指offer】 将数组分成和相等的三个部分
作者:limanting
地址:https://blog.manxiaozhi.com/articles/2021/09/25/1632562505225.html