题目描述
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
解法一:先找到一个偶数的位置i,再找到i之后的第一个奇数的位置j,将i到i-1之间的元素往后移一位,然后将奇数放在i的位置上。依次找下去,直到找不到j
class Solution1 { public: void reOrderArray(vector<int> &array) { int len = array.size(); int i = 0; for (; i < len;) { //找到偶数 while (i < len&&(array[i] & 01 )!=0) { ++i; } int j = i+1; //找到之后的奇数 while (j < len&&(array[j] & 01) == 0) { ++j; } if (j < len) { int temp = array[j]; for (int k = j; k >i; --k) { array[k] = array[k - 1]; } array[i] = temp; } else break; } } };
解法二:再建立一个容器,先将原来容器中的奇数放入,在将偶数放入。
class Solution2 { public: void reOrderArray(vector<int> &array) { vector<int> arr; for (int i = 0; i < array.size(); ++i) { if ((array[i] & 01) != 0) arr.push_back(array[i]); } for (int i = 0; i < array.size(); ++i) { if ((array[i] & 01) == 0) arr.push_back(array[i]); } array = arr; } };