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

题目描述

  • 给定一个数组,问是否可以按顺序分成三份,每份之和一样

示例

输入:arr = [0,2,1,-6,6,-7,9,1,2,0,1]
输出:true
解释:(0 2 1), (-6 6 -7 9 1), (2 0 1)
输入:arr = [0,2,1,-6,6,7,9,-1,2,0,1]
输出:false
输入:arr = [3,3,6,5,-2,2,5,1,-9,4]
输出:true

题解

  • 思路
    • 虽然是简单题,但数组长度为 5w,暴力肯定超时
    • 求和,找三分之一和的位置
    • 可以按顺序找,判断边界是否越界(需要找三次);也可以找首尾,然后判断中间是否存在(需要找两次)
func canThreePartsEqualSum(arr []int) bool {
    sum := 0
    for _, v := range arr { sum += v }
    if sum % 3 != 0 { return false }

    sum /= 3
    i, j := 0, len(arr) - 1
    for s := 0; i < len(arr); i ++ {
        s += arr[i]
        if s == sum { break }
    }
    for s := 0; j >= 0; j -- {
        s += arr[j]
        if s == sum { break }
    }

    return i + 1 < j
}
posted @ 2025-08-31 21:50  余越  阅读(12)  评论(0)    收藏  举报