LeetCode 1013. 将数组分成和相等的三个部分

题目描述

1013. 将数组分成和相等的三个部分

思路分析

解法一:一次遍历计段(推荐)

核心思路

  • 先计算总和,若不能被 3 整除直接返回 false。
  • 目标和为 total / 3,遍历累加并统计满足目标的段数。
  • 只要找到至少 3 段即可。


复杂度分析

  • 时间复杂度:O(n),其中 n 表示数组长度。
  • 空间复杂度:O(1),仅使用常数额外空间。
class Solution {
    public boolean canThreePartsEqualSum(int[] arr) {
        int total = 0;
        for (int v : arr) {
            total += v;
        }
        if (total % 3 != 0) {
            return false;
        }

        int target = total / 3;
        int sum = 0;
        int count = 0;

        // 统计满足目标的段数
        for (int v : arr) {
            sum += v;
            if (sum == target) {
                count++;
                sum = 0;
            }
        }

        return count >= 3;
    }
}
func canThreePartsEqualSum(arr []int) bool {
	total := 0
	for _, v := range arr {
		total += v
	}
	if total%3 != 0 {
		return false
	}

	target := total / 3
	sum := 0
	count := 0

	// 统计满足目标的段数
	for _, v := range arr {
		sum += v
		if sum == target {
			count++
			sum = 0
		}
	}

	return count >= 3
}

相似题目

题目 难度 考察点
560. 和为 K 的子数组 中等 前缀和
724. 寻找数组的中心下标 简单 前缀和
228. 汇总区间 简单 分段
1523. 在区间范围内统计奇数数目 简单 计数
1013. 将数组分成和相等的三个部分 简单 前缀和
本文作者:
本文链接: https://hgnulb.github.io/blog/2025/00181600
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处!