时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M 热度指数:738995
本题知识点: 数组
算法知识视频讲解
题目描述
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
链接: 调整数组顺序使奇数位于偶数前面.
解题思路
从前向后寻找奇数,找到后向前寻找偶数,然后进行交换。这样的交换方式保证了奇数和奇数,偶数和偶数之间的相对位置不变。
代码实现
class Solution {
public:
void reOrderArray(vector<int> &array) {
if (array.size() == 0 || array.size() < 2) {
return;
}
int n = array.size();
for (int i = 1; i < n; i++) {
// 当前元素是奇数,就移动到奇数序列
if (array[i] % 2 != 0) {
int value = array[i];
int cur = i;
while (cur > 0 && (array[cur - 1] % 2 == 0)) {
array[cur] = array[cur - 1];
cur--;
}
array[cur] = value;
}
// 当前元素是偶数,无须移动
}
}
};