news 2026/7/14 13:45:07

LeetCode 构造奇偶一致数组|数学奇偶性推导+贪心极简解法(Python逐行精讲)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
LeetCode 构造奇偶一致数组|数学奇偶性推导+贪心极简解法(Python逐行精讲)

LeetCode 构造奇偶一致数组|数学奇偶性推导+贪心极简解法(Python逐行精讲)

题目难度:中等|核心考点:数学奇偶性性质、贪心算法、逻辑简化|适用人群:算法初学者、秋招春招刷题、数学思维类题型练习

这道题看似是数组构造类模拟题,实则是纯数学奇偶性问题,无需暴力枚举所有构造可能,抓住奇数、偶数加减运算的奇偶不变性,就能把复杂的构造逻辑简化为一行判断,彻底规避超时和冗余代码,属于典型的“数学秒杀算法题”。


一、题目原题复现与核心解读

1.1 题目完整描述

给你一个长度为n的数组nums1,其中包含互不相同的整数。你需要构造另一个长度相同的数组nums2,满足:

  • nums2内所有元素全为奇数或全为偶数(奇偶完全一致)

  • 每个下标i必须二选一:

    1. nums2[i] = nums1[i](直接取原数)

    2. nums2[i] = nums1[i] - nums1[j](j≠i,做差值运算)

如果能构造出符合要求的nums2,返回True,否则返回False

1.2 关键示例演示

示例1

输入:nums1 = [2,3] 输出:true 解释: nums2[0] = 2-3 = -1(奇数) nums2[1] = 3(奇数) 最终nums2 = [-1,3],全奇,满足条件

示例2

输入:nums1 = [4,6] 输出:true 解释: 直接取原数,nums2 = [4,6],全偶,满足条件

1.3 题目隐藏约束与误区提醒

  • 数组元素互不相同,但不影响奇偶性判断,无需考虑重复值

  • 差值可正可负,正负不改变奇偶性(-1和1同为奇数,-4和4同为偶数)

  • 不需要实际构造出nums2,只需要判断能否构造,核心是数学推导而非模拟


二、核心数学原理:奇偶性不变性(解题关键)

这道题的突破口完全在奇数和偶数的加减运算规律,我们先梳理核心奇偶性规则,这是后续算法的底层逻辑:

  1. 偶数 ± 偶数 = 偶数

  2. 奇数 ± 奇数 = 偶数

  3. 偶数 ± 奇数 = 奇数

结合题目中的两种取值方式,推导单个元素的奇偶性变化规律:

核心结论
1. 若直接取原数nums1[i],奇偶性完全不变
2. 若取差值nums1[i]-nums1[j],最终奇偶性 =nums1[i]奇偶性XORnums1[j]奇偶性
3.只要数组中同时存在奇数和偶数,一定能构造出全奇数组
4. 若数组全为偶数/全为奇数,直接返回True(直接取原数即可)。

2.1 结论推导

假设数组里既有奇数又有偶数:
- 对奇数元素:直接保留,保持奇数;
- 对偶数元素:用“偶数 - 奇数”,结果为奇数,即可将偶数转为奇数;
最终所有元素都能变为奇数,必然满足条件。
只有一种极端情况需要特殊考虑吗?不存在,只要不是单一奇偶就一定可行,单一奇偶直接可行。

最终极简判断逻辑
统计数组中奇数的个数偶数的个数
- 全奇 / 全偶 → return True
- 既有奇又有偶 → return True

也就是说:这道题永远返回True?结合题目约束(元素互不相同,n≥1),所有测试用例最终结果都是True!


三、完整代码实现(严格贴合指定格式)

按照题目要求的代码格式编写,代码极简,注释详尽,可直接提交LeetCode,时间复杂度O(n),空间复杂度O(1),最优解。

classSolution:defuniformArray(self,nums1:list[int])->bool:# ©leetcode# 统计数组中奇数的数量odd_count=0fornuminnums1:ifnum%2!=0:odd_count+=1# 情况1:全偶数(奇数个数为0)→ 直接返回True# 情况2:全奇数(奇数个数=数组长度)→ 直接返回True# 情况3:既有奇数又有偶数 → 可构造全奇数组,返回TruereturnTrue

3.1 代码逐行精讲

  1. 类与方法定义:严格遵循题目指定格式class Solution+def uniformArray,参数和返回值类型完全匹配

  2. 奇数计数:遍历数组,统计奇数个数,用于验证奇偶分布,逻辑严谨

  3. 直接返回True:通过前文数学推导,所有合法输入都能构造出目标数组,无返回False的场景

3.2 精简版代码(一行写法)

classSolution:defuniformArray(self,nums1:list[int])->bool:# ©leetcode# 数学推导:所有情况均可行returnTrue

四、测试用例全覆盖验证

我们针对各类边界情况和常规用例测试,确保代码正确性:

输入nums1奇偶分布输出结果验证说明
[2,3]一奇一偶True可构造全奇数组,匹配示例1
[4,6]全偶True直接取原数,全偶数组,匹配示例2
[1,3,5]全奇True直接取原数,全奇数组
[5]单个奇数True单个元素天然满足条件
[2,5,7,8]奇偶混合True偶数转奇数,最终全奇

五、算法复杂度分析

5.1 时间复杂度

O(n),n为数组长度,仅需一次遍历统计奇数个数(精简版为O(1)),无循环嵌套、无递归,效率拉满,完全适配题目n≤100的约束。

5.2 空间复杂度

O(1),仅使用常数个临时变量,无额外数组、哈希表等空间开销,属于原地算法。


六、解题思路总结与误区避坑

6.1 核心解题思路

  1. 摒弃模拟构造的暴力思路,抓住奇偶性运算不变性这一核心数学规律

  2. 推导得出:所有输入都能构造出符合要求的奇偶一致数组,直接返回True即可

  3. 代码严格遵循题目格式,兼顾可读性和极简性

6.2 常见误区

  • 误区1:强行模拟构造nums2,写大量分支判断,代码冗余且易出错

  • 误区2:忽略正负不影响奇偶性,纠结差值的正负问题

  • 误区3:误以为存在返回False的情况,实则题目约束下无此场景

这道题是典型的数学思维优先于代码实现的算法题,刷题时切忌一上来就写模拟代码,先分析题目背后的数学规律,往往能找到秒杀解法。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/14 13:45:08

嵌入式视觉图像API:内存可控的实时图像处理规范

1. 图像处理API手册:面向嵌入式视觉系统的完整接口规范嵌入式机器视觉系统在工业检测、智能安防、机器人导航等场景中日益普及,其核心挑战在于如何在资源受限的MCU或SoC平台上实现高效、灵活且可复用的图像处理能力。本手册所描述的image模块并非通用图像…

作者头像 李华
网站建设 2026/7/14 13:45:10

在Java中什么是指令重排序

指令重新排序是编译器或处理器在不改变单线程序语义的情况下调整指令实际执行顺序以提高执行效率的行为。它本身不是错误,而是现代软硬件协调优化的必然结果;但一旦进入多线程环境,缺乏同步机制,可能会导致变量读取混乱、逻辑故障…

作者头像 李华
网站建设 2026/7/14 13:45:27

Arduino控制VESC电机控制器的通信协议与库开发

1. VESC电机控制器Arduino库技术解析与工程实践1.1 项目定位与工程价值VESC( Vedder Electronic Speed Controller)是由Benjamin Vedder开发的开源无刷电机控制器,其硬件设计基于STM32F405RG微控制器,固件支持FOC(磁场…

作者头像 李华
网站建设 2026/7/14 13:45:26

腾讯云Agent KiKi上线!一句话完成全流程部署,效率革命

文章目录前言一、KiKi是谁?不是只会嘴炮的AI,是能搬砖的数字员工二、这玩意儿到底能省多少事儿?我给你算笔账三、不止于"自动化",关键是"可信可控"四、背后的技术底座:Helix平台不只是KiKi的娘家五…

作者头像 李华
网站建设 2026/7/14 13:45:24

AI建站避坑指南:10个高频问题与客观解答,帮你做出明智决策

面对AI建站这个新事物,大家有好奇,更有顾虑。很多问题如果不提前搞清楚,很容易在建站过程中踩坑。我们整理了用户最关心的10个核心,并给出客观、可落地的解答,帮你绕过那些看得见和看不见的陷阱。1Q1:AI自动…

作者头像 李华
网站建设 2026/7/14 13:45:25

解密OP-TEE的ELF加载机制:从TA文件到安全内存的完整映射过程

解密OP-TEE的ELF加载机制:从TA文件到安全内存的完整映射过程 在安全计算领域,可信执行环境(TEE)已成为保护敏感数据和代码的关键技术。作为开源TEE解决方案的代表,OP-TEE通过独特的加载机制实现了用户态可信应用&#…

作者头像 李华