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

2020-03-11  本文已影响0人  韩小禹
/*
 * @Description:
 * @Author: huacong
 * @Date: 2020-03-11 21:50:42
 * @LastEditTime: 2020-03-11 23:19:41
 * @LastEditors: huacong
 */
package main

import "fmt"

func Sum(arr []int) int {
    sum := 0
    for _, v := range arr {
        sum += v
    }
    return sum
}

func canThreePartsEqualSum(A []int) bool {
    //解题思路:
    //1:
    // 数组中所有元素之和必须可以整除3
    sum, curr, cnt := 0, 0, 0
    for _, v := range A {
        sum += v
    }
    if sum%3 != 0 {
        return false
    }

    //2:
    // 声明两个个变量curr和cnt初始值为都为0,curr用于记录累加值,cnt用于记录满足等分条件的次数。
    // 遍历数组将数组元素的值累加给curr,判断如果curr的值等于sum/3,则将cnt+=1,并将curr置为0
    for _, v := range A {
        curr += v
        if curr == sum/3 {
            cnt += 1
            curr = 0
        }
    }

    //3:
    // 最后判断cnt的值如果大于或等于3,说明数组满足可以划分为三个和相等。
    // 如果数组中都是0,且长度大于3,cnt的值会大于3
    if cnt >= 3 {
        return true
    }
    return false
}

func main() {

    //给你一个整数数组 A,只有可以将其划分为三个和相等的非空部分时才返回 true,否则返回 false。
    var arr = []int{0, 2, 1, -6, 6, -5, 8, 1, 1, 1, 1}
    res := canThreePartsEqualSum(arr)
    fmt.Println(res)

}
上一篇 下一篇

猜你喜欢

热点阅读