题目描述
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
class Solution { public: void reOrderArray(vector<int> &array) { vector<int> a,b; for(int i=0;i<array.size();i++) { if(array[i]%2==1) a.push_back(array[i]); else b.push_back(array[i]); } for(int j=0;j<b.size();j++) a[a.size()-1+j]=b[j]; } };
超时,溢出了!
改进一下代码,如下。
class Solution { public: void reOrderArray(vector<int> &array) { vector<int> b; vector<int>::iterator ib; for(ib=array.begin();ib!=array.end();) { if(*ib%2==0) { b.push_back(*ib); ib=array.erase(ib); } else ib++; } vector<int> ::iterator ib2=b.begin(); for(ib2;ib2!=b.end();ib2++) { array.push_back(*ib2); } } };
碰到另外一种思路:
思路:类似冒泡算法,前偶后奇数就交换: 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]); } } } } };