美文网首页
将数组分成和相等的三个部分

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

作者: 韩小禹 | 来源:发表于2020-03-11 23:19 被阅读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)
    
    }
    

    相关文章

      网友评论

          本文标题:将数组分成和相等的三个部分

          本文链接:https://www.haomeiwen.com/subject/ytgkjhtx.html