【剑指offer-C++】JZ81:调整数组顺序使奇数位于偶数前面(二)

【剑指offer-C++】 JZ81:调整数组顺序使奇数位于偶数前面【二】

    • 题目描述
    • 解题思路

题目描述

描述:输入一个长度为 n 整数数组,数组里面可能含有相同的元素,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前面部分,所有的偶数位于数组的后面部分,对奇数和奇数,偶数和偶数之间的相对位置不做要求,但是时间复杂度和空间复杂度必须如下要求。

数据范围:0≤n≤50000,数组中每个数的值 0≤val≤10000。

要求:时间复杂度 O(n),空间复杂度 O(1)。

输入:[1,2,3,4]
返回值:[1,3,2,4]
说明:[3,1,2,4]或者[3,1,4,2]也是正确答案 
输入:[1,3,5,6,7]
返回值:[1,3,5,7,6]
说明:[3,1,5,7,6]等也是正确答案 
输入:[1,4,4,3]
返回值:[1,3,4,4]

解题思路

调整数组顺序使奇数位于偶数前面(二):最直观的想法是,双指针。使用变量i指向奇数,初始为0,使用变量j指向偶数,初始为n-1,当i小于j时执行循环,首先找到左边第一个偶数,再找到右边第一个奇数,然后交换两者,并将指针向内收缩。

vector reOrderArrayTwo(vector& array) 
{
   int n=array.size();
   // i指向左边部分
   int i=0;
   // j指向右边部分
   int j=n-1;
   while(i

你可能感兴趣的:(剑指offer,c++,算法,数据结构)