[28] 用 python 刷 Leetcode: 1013

原始题目

Given an array of integers arr, return true if we can partition the array into three non-empty parts with equal sums.

Formally, we can partition the array if we can find indexes i + 1 < j with
(arr[0] + arr[1] + ... + arr[i] == arr[i + 1] + arr[i + 2] + ... + arr[j - 1] == arr[j] + arr[j + 1] + ... + arr[arr.length - 1])

Example 1:

Input: arr = [0,2,1,-6,6,-7,9,1,2,0,1]
Output: true
Explanation: 0 + 2 + 1 = -6 + 6 - 7 + 9 + 1 = 2 + 0 + 1

Example 2:

Input: arr = [0,2,1,-6,6,7,9,-1,2,0,1]
Output: false

Example 3:

Input: arr = [3,3,6,5,-2,2,5,1,-9,4]
Output: true
Explanation: 3 + 3 = 6 = 5 - 2 + 2 + 5 + 1 - 9 + 4

Constraints:

  • 3 <= arr.length <= 5 * 104
  • -104 <= arr[i] <= 104

题目分析

一个阵列,当里面的内容相加可以分成完全相等的三个部分,并且内容都不是空值就会传 true
否则回传 false

解题过程

可以理解成三等分的每一份恰好等於阵列总和的三分之一,所以不能整除三的就必定是 false
从阵列开头累加,当等於三分之一的总和,则切为一份
继续计算下一份的累加值,当累加值等於三分之二的总和时,剩下的值总和必然是另外的三分之一,所以可以回传 true
若累加没有达到三分之二则回传 false

class Solution:
    def canThreePartsEqualSum(self, arr: List[int]) -> bool:
        s = sum(arr)
        if s % 3 != 0:
            return False
        
        target = s // 3
        n, i, cur = len(arr), 0, 0
        
        while i < n:
            cur += arr[i]
            if cur == target:
                break
            i += 1
        
        if cur != target:
            return False
        
        j = i + 1
        while j + 1 < n:
            cur += arr[j]
            if cur == target * 2:
                return True
            j += 1
            
        return False

结果

result


<<:  Re: 新手让网页 act 起来: Day27 - React Hooks 之 useImperativeHandle 与 React.forwardRef

>>:  EP30 - 最後但不是终点

C# delegate 委派

IT邦第二篇 就献给委派了 记得当年第一次看到 += 这东西的时候 问问前辈这是什麽 前辈只有跟我说...

Day8 单纯贝氏分类器 (Naive Bayes Classifier)

什麽是单纯贝氏分类器? 讲人话就是在有些特徵之间相互独立且不影响的前提下,利用贝式定理算出个别特徵与...

Day17 CSS Media Query

在了解Media Queries的用法之前,先来了解一些RWD的观念吧。 RWD是什麽? RWD是...

Day 0x4 UVa10041 Vito's Family

Virtual Judge ZeroJudge 题意 Vito 常拜访亲戚,所以想要找一间和所有亲戚...

GitHub Autolinked references & Permanent link - 团队讨论的专业技巧

在资讯团队进行讨论的过程中,不免会提到相关 Issue、Pull Request 与 程序码。无论是...