输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
- 空间换时间。开新数组,第一次遍历放入奇数,第二次遍历放入偶数。
- 自左向右找到偶数
a
,再以从偶数开始,继续找到奇数b
,将区间[a, b)
内的偶数右移1
位,将奇数b
移至a
原来的位置上。循环。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| class Solution { public: void reOrderArray(vector<int> &array) { bool changed = true; const int size = array.size(); for (int i = 0; i < size - 1 && changed; i++) { changed = false; for (int j = 0; j < size - 1 - i; j++) { if (((array[j] & 1) == 0) && ((array[j + 1] & 1) == 1)) { changed = true; array[j] ^= array[j + 1] ^= array[j] ^= array[j + 1]; } } } } };
|