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),常数级别额外空间

核心发现

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

相关推荐
UIU11413 小时前
P1233 [ICPC 2001 Taejon R] 木棍加工
数据结构·c++·算法·动态规划
论文复现现场14 小时前
WRF、FEA 能用 L40S 加速吗?求解器检查、断点恢复与长期运行
java·数据库·算法·wrf·有限元分析·gpu计算·断点续算
ZhengEnCi14 小时前
用 AI 写代码为什么拼到最后还是拼人:算力瓶颈与领域专家提示词的本质差异
算法·架构
秋天的怀念_David15 小时前
第二十一夜 · 数字黑洞与西西弗斯的惩罚
java·程序人生·算法
碧海银沙音频科技研究院16 小时前
在PC电脑上用Whisper→Marian算法实现离线语音翻译功能
算法·whisper
niyongsheng16 小时前
3D 装箱算法工程化:数据结构、放置启发式与支撑规则
数据结构·算法·rust
j7~18 小时前
【穷举、深搜与回溯算法】一棵决策树讲透全排列与子集
数据结构·c++·算法·leetcode·回溯·递归
傅科摆 _ py19 小时前
DP,贪心,堆和栈,二分力扣复习
开发语言·python·算法
Shaoshing20 小时前
LeetCode100 42.接雨水
java·算法·leetcode
域限奇点访客20 小时前
用AI生成问卷的网站怎么选?看题目录入结构、题型映射和生成后的校验
算法