zoukankan      html  css  js  c++  java
  • leetcode-1013

    先理解题意,什么叫三等分,说明三块相等,那么问题抽象成什么了?

    每一块都等于sum / 3

    且只要两块相等则可以推出第三块也相等

    所以求解就是 两块的值为sum / 3 且相等

    func canThreePartsEqualSum(A []int) bool {
        sum := 0
        for _, v := range A {
            sum += v
        }
        if sum % 3 != 0 {
            return false
        }
        sum1, sum2 := sum / 3, sum / 3
        for i := range A {
            if sum1 != 0 {
                sum1 -= A[i]
            } else if sum2 != 0 {
                sum2 -= A[i]
                if sum2 == 0 {
                    return true
                }
            }
        }
        return false
    }
    
    func Method2(A []int) bool {
        sum := 0
        for i := 0; i < len(A); i++ {
            sum += A[i]
        }
    
        if sum % 3 != 0 {
            return false
        }
        left := 0
        right := len(A) - 1
        leftSum := A[left]
        rightSum := A[right]
        segVal := sum/3
        
        for left + 1 < right {
            if leftSum == rightSum {
                if leftSum == segVal {
                    return true
                }
            }
            if leftSum < sum/3 {
                left++
                leftSum += A[left]
            }
            if rightSum < sum/3 {
                right--
                rightSum += A[right]
            }
        }
        return false
    }

    end

    一个没有高级趣味的人。 email:hushui502@gmail.com
  • 相关阅读:
    P2168 [NOI2015]荷马史诗
    P3195 [HNOI2008]玩具装箱TOY
    P1972 [SDOI2009]HH的项链
    P2339 提交作业usaco
    P3974 [TJOI2015]组合数学
    P2831 愤怒的小鸟
    [校内模拟题4]
    P3952 时间复杂度
    P3531 [POI2012]LIT-Letters
    2019.10.1 qbxt模拟题
  • 原文地址:https://www.cnblogs.com/CherryTab/p/12466487.html
Copyright © 2011-2022 走看看