【剑指offer】 将数组分成和相等的三个部分

  |   0 评论   |   0 浏览

题目

给你一个整数数组 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