/*
* @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)
}
网友评论