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

核心发现

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

相关推荐
网络工程小王8 分钟前
【大模型(LLM)的业务开发】学习笔记
人工智能·算法·机器学习
y = xⁿ9 分钟前
【Leet Code 】滑动窗口
java·算法·leetcode
WBluuue12 分钟前
数据结构与算法:二项式定理和二项式反演
c++·算法
nianniannnn12 分钟前
力扣104.二叉树的最大深度 110. 平衡二叉树
算法·leetcode·深度优先
_深海凉_22 分钟前
LeetCode热题100-只出现一次的数字
算法·leetcode·职场和发展
nianniannnn41 分钟前
力扣206.反转链表 92.反转链表II
算法·leetcode·链表
澈2071 小时前
哈希表实战:从原理到手写实现
算法·哈希算法
旖-旎1 小时前
哈希表(存在重复元素||)(4)
数据结构·c++·算法·leetcode·哈希算法·散列表
Run_Teenage1 小时前
Linux:认识信号,理解信号的产生和处理
linux·运维·算法
無限進步D1 小时前
蓝桥杯赛前刷题
c++·算法·蓝桥杯·竞赛