调整数组顺序使奇数位于偶数前面
C++,数组考点。
思路:
- 维护一个范围[left, right],在范围里从左到右扫描,直到碰到的第一个奇数odd_num,然后让扫描到的偶数都右移一个位置。最后将范围左端赋值为odd_num;
- 修改范围为[left+1, right];
- 重复第一步。
代码如下:
class Solution {
public:
void reOrderArray(vector<int> &array) {
dfs(array, 0, array.size() - 1);
}
void dfs(vector<int> &array, int left, int right) {
if (left > right) return ;
int odd = left;
for ( ; odd <= right && array[odd] % 2 != 1; odd++) ;
if (odd > right) return ;
else {
int t = array[odd];
while (odd > left) {
array[odd] = array[odd - 1];
odd--;
}
array[left] = t;
}
dfs( array, left + 1, right);
}
};