奇偶三数之和

2026 华为OD机试真题 7月1日华为OD上机新系统考试真题 100 分题型

点击查看华为 OD 机试真题完整目录:2026最新华为OD机试新系统卷 + 双机位C卷 真题题库目录|全覆盖题库 + 逐点算法考点详解

题目描述

给定一个包含 n 个整数的数组 nums 和一个整数 target,请从数组中找出所有 不重复 的三元组 [nums[i], nums[j], nums[k]],满足以下两个条件:

  1. 和为目标: nums[i]+nums[j]+nums[k]=target

  2. 奇偶性约束: 三个元素中 至少有两个 是奇数。

返回所有满足条件的不重复三元组。

提示:

  • 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] = 93 是奇数,但 24 都是偶数,只有一个奇数,不通过

示例2

输入

0,0,0
0

输出

[]

说明

示例3

输入

1,1,2,3,5,7
8

输出

[[1,2,5]]

说明

1+2+5=8,且至少两个奇数(1,5都是奇数)

解题思路

核心思想

排序 + 双指针 + 奇偶性过滤:

  1. 先对数组排序,便于去重和双指针操作
  2. 固定第一个数,使用双指针找另外两个数
  3. 判断三元组的奇数个数是否 >= 2

算法步骤

  1. 对数组排序
  2. 遍历第一个数 i(从 0 到 n-3)
  3. 跳过重复的第一个数
  4. 双指针 j=i+1, k=n-1,找和为 target 的三元组
  5. 判断奇数个数 >= 2,满足则加入答案
  6. 跳过重复的 j 和 k

复杂度分析

  • 时间复杂度:O(n²),排序 O(n log n) + 双指针 O(n²)
  • 空间复杂度:O(1),原地操作(不计
THE END