输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
法一思想:新建两个数组。一个保存奇数,一个保存偶数,然后在copy给原来的array数组。缺点:须另外开辟内存空间
class Solution {
public:
void reOrderArray(vector<int> &array) {
vector<int> v1,v2;
for (int i=0;i<array.size();i++)
{
if(array[i]%2==0)
v2.push_back(array[i]);
else
v1.push_back(array[i]);
}
int i=0;
for (i=0;i<v1.size();i++)
array[i]=v1[i];
i=v1.size();
for (int j=0;j<v2.size();j++)
array[i++]=v2[j];
}
};
法二思想:找到奇数记录位置,若该位置前有偶数则从偶数开始往后移,再将奇数放在前面正确的位置,缺点:须多次移动数组
class Solution {
public:
void reOrderArray(vector<int> &array) {
int len=array.size();
int m=0,i=0,loc=0,temp=0;
while (i<len)
{
if (array[i]%2!=0)
{
temp=array[i];
loc=i;
for (;i>m;i--)
array[i]=array[i-1];
array[m]=temp;
m++;
}
i++;
}
}
};