奇偶三数之和
2026 华为OD机试真题 7月1日华为OD上机新系统考试真题 100 分题型
点击查看华为 OD 机试真题完整目录:2026最新华为OD机试新系统卷 + 双机位C卷 真题题库目录|全覆盖题库 + 逐点算法考点详解
题目描述
给定一个包含 n 个整数的数组 nums 和一个整数 target,请从数组中找出所有 不重复 的三元组 [nums[i], nums[j], nums[k]],满足以下两个条件:
-
和为目标: nums[i]+nums[j]+nums[k]=target
-
奇偶性约束: 三个元素中 至少有两个 是奇数。
返回所有满足条件的不重复三元组。
提示:
- 3≤nums.length≤3000
- −105≤nums[i]≤105
补充说明
返回值输出格式:每个子数组内部的元素按数值升序排列,所有子数组之间按字典序升序排列(即先比较第一个元素,若相同再比较第二个,以此类推)。示例:[[-1,-1,2],[-1,0,1]]
2026 华为OD机试真题 7月1日华为OD上机新系统考试真题 100 分题型
输入描述
输入为一个数组 nums 和一个目标整数 target。
格式:第一行是数组元素(逗号分隔),第二行是目标整数。
输出描述
输出所有满足条件的不重复三元组。
示例1
输入
-1,0,1,2,-1,-4
0
输出
[[-1,-1,2],[-1,0,1]]
说明
[1,3,5] = 9,三个都是奇数,通过。[2,3,4] = 9,3是奇数,但2和4都是偶数,只有一个奇数,不通过。
示例2
输入
0,0,0
0
输出
[]
说明
示例3
输入
1,1,2,3,5,7
8
输出
[[1,2,5]]
说明
1+2+5=8,且至少两个奇数(1,5都是奇数)
解题思路
核心思想
排序 + 双指针 + 奇偶性过滤:
- 先对数组排序,便于去重和双指针操作
- 固定第一个数,使用双指针找另外两个数
- 判断三元组的奇数个数是否 >= 2
算法步骤
- 对数组排序
- 遍历第一个数 i(从 0 到 n-3)
- 跳过重复的第一个数
- 双指针 j=i+1, k=n-1,找和为 target 的三元组
- 判断奇数个数 >= 2,满足则加入答案
- 跳过重复的 j 和 k
复杂度分析
- 时间复杂度:O(n²),排序 O(n log n) + 双指针 O(n²)
- 空间复杂度:O(1),原地操作(不计
版权声明:
作者:魔改工程师
链接:https://www.sylblog.xin/archives/685
文章版权归作者所有,未经允许请勿转载。
THE END