09 Sept 2026Go / Python / TypeScriptEasy

Partition Array Into Three Parts With Equal Sum

Check whether an array can be split into three nonempty contiguous parts with equal sums.

Require the total to divide by three, then scan for two completed target-sum parts before the final element; the remaining suffix must form the third.

complexity

O(n) time and O(1) space.

solution files

  • Go partition-array-into-three-parts-with-equal-sum/solution.go
  • Python partition-array-into-three-parts-with-equal-sum/solution.py
  • TypeScript partition-array-into-three-parts-with-equal-sum/solution.ts

Solution files

Gopartition-array-into-three-parts-with-equal-sum/solution.go
package main

func canThreePartsEqualSum(arr []int) bool {
	total := 0
	for _, value := range arr {
		total += value
	}
	if total%3 != 0 {
		return false
	}
	target, current, parts := total/3, 0, 0
	for index := 0; index < len(arr)-1; index++ {
		current += arr[index]
		if current == target {
			parts++
			current = 0
			if parts == 2 {
				return true
			}
		}
	}
	return false
}
Pythonpartition-array-into-three-parts-with-equal-sum/solution.py
class Solution:
    def canThreePartsEqualSum(self, arr: list[int]) -> bool:
        total = sum(arr)
        if total % class="syntax-number">3: return False
        target, current, parts = total class=class="syntax-string">"syntax-comment">// class="syntax-number">3, class="syntax-number">0, class="syntax-number">0
        for value in arr[:-class="syntax-number">1]:
            current += value
            if current == target:
                parts, current = parts + class="syntax-number">1, class="syntax-number">0
                if parts == class="syntax-number">2: return True
        return False
TypeScriptpartition-array-into-three-parts-with-equal-sum/solution.ts
function canThreePartsEqualSum(arr: number[]): boolean {
  const total = arr.reduce((sum, value) => sum + value, class="syntax-number">0); if (total % class="syntax-number">3 !== class="syntax-number">0) return false;
  const target = total / class="syntax-number">3; let parts = class="syntax-number">0; let sum = class="syntax-number">0;
  for (let index = class="syntax-number">0; index < arr.length - class="syntax-number">1; index += class="syntax-number">1) { sum += arr[index]; if (sum === target) { parts += class="syntax-number">1; sum = class="syntax-number">0; if (parts === class="syntax-number">2) return true; } }
  return false;
}