区分奇偶的数组排序
2026 华为OD机试真题 7月26日华为OD上机新系统考试真题 100 分题型
点击查看华为 OD 机试真题完整目录:2026最新华为OD机试新系统卷 + 双机位C卷 真题题库目录|全覆盖题库 + 逐点算法考点详解
题目描述
给定一个非负整数数组 nums,满足以下两个前提条件:
- 数组长度为偶数,且 2≤nums.length≤20000
- 数组中恰好有一半元素是偶数,另一半元素是奇数
请你对该数组进行重构,满足以下两个核心要求:
- 重构后的数组中,所有位于偶数下标(下标从 0 开始)的元素必须是偶数,所有位于奇数下标的元素必须是奇数
- 重构后,所有占据偶数下标的偶数元素,需按照从小到大的升序排列;所有占据奇数下标的奇数元素,也需按照从小到大的升序排列
返回满足上述所有条件的重构后数组。
补充说明
- 数组长度 n 满足 2≤n≤20000,且 n%2==0
- 数组中的元素为非负整数,满足 0≤nums[i]≤1000
- 数组中偶数和奇数的数量严格相等,各占 n/2 个
- 满足条件的输出数组是唯一的
2026 华为OD机试真题 7月26日华为OD上机新系统考试真题 100 分题型
示例1
输入
4,2,5,7
输出
2,5,4,7
说明
偶数元素为
[4,2],升序后为[2,4];奇数元素为[5,7],升序后为[5,7]。
示例2
输入
1,3,2,6,8,5
输出
2,1,6,3,8,5
说明
偶数元素为
[2,6,8](升序后仍为[2,6,8]),奇数元素为[1,3,5](升序后仍为[1,3,5])
示例3
输入
9,0,3,4,7,2
输出
0,3,2,7,4,9
说明
偶数元素为
[0,4,2](升序后为[0,2,4]),奇数元素为[9,3,7](升序后为[3,7,9])
解题思路
核心思想
题目要求偶数下标放偶数,奇数下标放奇数,并且两个位置序列内部都要升序。因此可以先把原数组拆成两个数组:偶数数组和奇数数组;分别排序后,再按下标奇偶交替放回结果数组。
因为题目保证偶数和奇数数量相等,所以排序后的偶数数组一定能填满所有偶数下标,排序后的奇数数组也一定能填满所有奇数下标。
算法步骤
- 按示例格式读取一行输入,用英文逗号切分得到
nums。 - 遍历
nums,将偶数加入evens,奇数加入odds。 - 分别对
evens和odds升序排序。 - 创建结果数组
ans。 - 依次取排序后的偶数放到
0, 2, 4...下标,取排序后的奇数放到1, 3, 5...下标。 - 将结果数组按英文逗号拼接输出。
复杂度分析
设数组长度为 n。
- 拆分数组复杂度为
O(n)。 - 两个子数组排序总复杂度为
O(n log n)。 - 合并结果复杂度为
O(n)。 - 总时间复杂度为
O(n log n),空间复杂度为 `O(
版权声明:
作者:魔改工程师
链接:https://www.sylblog.xin/archives/750
文章版权归作者所有,未经允许请勿转载。
THE END