核心考点:数组操作,排序思想的扩展使用
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。例如将数组{1, 2, 3, 4, 5, 6}调整为{1, 3, 5, 2, 4, 6}。
解析一:(若相对位置可变)
若是题目当中没有要求数组调整后奇数和奇数,偶数和偶数的相对位置不变,那么我们可以使用两个变量(left和right)来遍历数组,left从左往右寻找偶数,right从右往左寻找奇数,之后将left和right索引的元素进行交换。

如此进行下去,直到left和right错开为止。
class Solution {
public:
void reOrderArray(vector<int> &array) {
size_t left = 0, right = array.size() - 1;
while (left < right)
{
while (left < right&&array[left] % 2 == 1) //left向右找偶数
{
left++;
}
while (left < right&&array[right] % 2

本文详细解析了如何调整整数数组,使奇数位于前半部分,偶数位于后半部分,同时保持它们原有的相对位置。介绍了三种不同的方法:一种是双指针法,不改变奇数和偶数的相对位置;第二种是借助辅助容器,分别存储奇数和偶数后再重组;第三种是在原地调整数组,通过移动元素实现目标排序。每种方法的时间复杂度和空间复杂度都有所不同。
最低0.47元/天 解锁文章
2万+

被折叠的 条评论
为什么被折叠?



