题目描述;
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
注:本系列例程均在牛客网在线编程编译通过,并且在VS2015中编译通过;
思路分析:
主要采用的是两个vector容器来存放在遍历数组的时候分别将基数和偶数放到其中一个容器中;这样时间代价为O(n);
代码如下:
#include<iostream>
#include<vector>
using namespace std;
class Solution {
public:
void reOrderArray(vector<int> &array) {
if (array.empty()) return;
vector<int> j_num;
vector<int> o_num;
for (int i = 0; i < array.size(); i++) {
if (array[i] % 2 == 1)
j_num.push_back(array[i]);
else
o_num.push_back(array[i]);
}
array.clear();
for (int i = 0; i < o_num.size(); i++) {
array.push_back(o_num[i]);
}
for (int j = 0; j < o_num.size(); j++) {
array.push_back(o_num[j]);
}
}
};
int main(int argc,char** argv) {
Solution test;
vector<int> num = {2,1,3,4,6,8,5,10,12,11};
test.reOrderArray(num);
vector<int>::iterator itr = num.begin();
for (; itr != num.end(); itr++) {
cout << *itr << endl;
}
system("pause");
return 0;
}
结果如下: