仿照书上的解法写了第一版,发现不行:因为牛客网的题目要求:保证奇数和奇数,偶数和偶数之间的相对位置不变
class Solution {
public:
void reOrderArray(vector<int> &array) {
if(array.empty())
return;
//索引
int pBegin = 0;
int pEnd = array.size()-1;
while(pBegin<pEnd)
{
while(pBegin<pEnd && (array[pBegin] & 0x1)!=0) pBegin++;
while(pBegin<pEnd && (array[pEnd] & 0x1)==0) pEnd--;
if(pBegin<pEnd){
int temp;
temp = array[pBegin];
array[pBegin] = array[pEnd];
array[pEnd] = temp;
}
}
}
};
看到有大佬的一种解法:类似冒泡算法,前偶数后奇数就交换
class Solution {
public:
void reOrderArray(vector<int> &array) {
for(int i = 0;i < array.size();i++){
for(int j = array.size()-1; j>i;j--){
if(array[j]%2==1&&array[j-1]%2==0)
swap(array[j],array[j-1]);
}
}
}
};
另外一种解法,比较简单直接:遍历两遍数组,第一次顺序把奇数取出存入一个新的数组,第二次把偶数取出继续存入。
class Solution {
public:
void reOrderArray(vector<int> &array) {
vector<int> result;
int num = array.size();
for(int i=0; i<num; i++){
if(array[i]%2==1){
result.push_back(array[i]);
}
}
for(int i=0; i<num; i++){
if(array[i]%2==0){
result.push_back(array[i]);
}
}
array = result;
}
};