题目
输入一个长度为 n 整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前面部分,所有的偶数位于数组的后面部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
数据范围:0≤n≤5000,数组中每个数的值 0≤val≤10000
要求:时间复杂度O(n)O(n)O(n),空间复杂度O(n)O(n)O(n)
进阶:时间复杂度 O(n2)O(n^2)O(n2),空间复杂度O(1)O(1)O(1)
示例
输入:[1,2,3,4]
输出:[1,3,2,4]
####思路
用两个额外的数组一个装奇数一个装偶数,最后再把他们合并。
####具体实现
#include <vector>
#include "iostream"
using namespace std;
class Solution {
public:
vector<int> reOrderArray(vector<int>& array) {
vector<int> odd; //存储奇数元素
vector<int> even; //存储偶数元素
for (int val : array) { //遍历将元素加入数组
if (val % 2 == 0) even.push_back(val);
else odd.push_back(val);
}
odd.insert(odd.end(), even.begin(), even.end()); //将偶数数组合并到奇数数组的末尾。
return odd;
}
};
int main(){
int k;
cin >> k;
vector<int> vec(k);
for(int i = 0; i < k; i++){
cin >> vec[i];
}
Solution solution;
vector<int> vec2 = solution.reOrderArray(vec);
for(int i = 0 ; i < k ; i++){
cout << vec2[i] << " ";
}
}