LeetCode 3432. 统计元素和差值为偶数的分区方案数

LeetCode 3432. 统计元素和差值为偶数的分区方案数

问题描述

给定一个数组 nums,需要将它分割成两个非空数组。对左子数组和右子数组先求元素和再做差,统计并返回差值为偶数的分区方案数。

前缀和的发现

用前缀和优化时间复杂度到 O(n),设前缀和数组为 s,其中 s[i] 表示前 i 个元素的和。

对于分割点 i(左半部分是 s[i],右半部分是 s[n-1]-s[i]):

差值 = s[i] - (s[n-1] - s[i]) = 2*s[i] - s[n-1]

现在观察差值的奇偶性:

  • 2*s[i] 一定是偶数(乘以2的结果)
  • 差值的奇偶性只取决于 s[n-1] 的奇偶性

关键发现s[i] - (s[n-1] - s[i]) 是否为偶数,只和总和 s[n-1] 的奇偶性有关!

最终解法

go 复制代码
func countPartitionsDiff(nums []int) int {
    sum := 0
    for _, v := range nums {
        sum += v
    }
    
    // 总和为奇数:差值一定为奇数,返回0
    // 总和为偶数:所有分割点都有效,返回 n-1
    if sum % 2 != 0 {
        return 0
    }
    return len(nums) - 1
}

复杂度分析

  • 时间复杂度:O(n),只需遍历一次求总和
  • 空间复杂度:O(1),常数级别额外空间

核心发现

差值为偶数的条件完全由总和的奇偶性决定,与具体的分割位置无关。

相关推荐
Gorway2 小时前
解析残差网络 (ResNet)
算法
拖拉斯旋风2 小时前
LeetCode 经典算法题解析:优先队列与广度优先搜索的巧妙应用
算法
Wect2 小时前
LeetCode 207. 课程表:两种解法(BFS+DFS)详细解析
前端·算法·typescript
灵感__idea16 小时前
Hello 算法:众里寻她千“百度”
前端·javascript·算法
Wect1 天前
LeetCode 130. 被围绕的区域:两种解法详解(BFS/DFS)
前端·算法·typescript
NAGNIP2 天前
一文搞懂深度学习中的通用逼近定理!
人工智能·算法·面试
颜酱2 天前
单调栈:从模板到实战
javascript·后端·算法
CoovallyAIHub2 天前
仿生学突破:SILD模型如何让无人机在电力线迷宫中发现“隐形威胁”
深度学习·算法·计算机视觉
CoovallyAIHub2 天前
从春晚机器人到零样本革命:YOLO26-Pose姿态估计实战指南
深度学习·算法·计算机视觉
CoovallyAIHub2 天前
Le-DETR:省80%预训练数据,这个实时检测Transformer刷新SOTA|Georgia Tech & 北交大
深度学习·算法·计算机视觉