题目描述:
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
解题思路:
遍历整个数组是偶数的array.push_back()到数组尾部
同时删除该位置上的偶数 array.erase(array.begin()+pos);
结合代码看,在删除之后我们需要--len,否则陷入死循环
还需要--i,否则在删除一个元素之后 i实际指向了原数组中删除元素的下下个元素的位置
举个例子:数组{2,3,5,6}
元素2 push_back()到数组尾部 然后删除 此时若不--i,那么i则等于1
在删除2后的新数组中 array[1]其实是元素5
那么我们就忽略了对元素3的处理
所以会出现问题
代码-i展示:
class Solution {
public:
void reOrderArray(vector<int> &array) {
int len = array.size();
for (int i = 0;i < len;++i) {
if (array[i] % 2 == 0) {
array.push_back(array[i]);
array.erase(array.begin() + i);
--i;
--len;
}
}
}
};