剑指offer21--调整数组顺序使奇数位于偶数前面

题目描述

输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。

思路1:

建立一个新的数组

class Solution {
public:
    void reOrderArray(vector<int> &array) {
        vector<int> result;
        int num=array.size();
        for(int i=0;i<num;i++)
            {
            if(array[i]%2==1)
                result.push_back(array[i]);
        }
        for(int i=0;i<num;i++)
            {
            if(array[i]%2==0)
                result.push_back(array[i]);
        }
        array=result;
    }
};

思路2:

删除,偶数,然后尾插push_back.

class Solution {
public:
void reOrderArray(vector<int> &array) {
    //vector<int> tmp;
    bool flag=false;
    int flag_break=-1;
    for(int i=0;i<array.size();i++)
    {
        if(array[i]==flag_break)
            break;
        if(array[i]%2==0)//oushu
        {
            int tmp=array[i];
            array.erase(array.begin()+i);
            if(!flag)
            {
                flag=true;
                flag_break=tmp;
            }
            array.push_back(tmp);
            i--;
        }
    }
}
};

对于判断奇偶,可以用位运算

	if((a1&0x1)==0){//一定要加括号,否则会出现问题
		cout<<" oushu "<<endl;
	}
	else
		cout<<" jishu"<<endl;

猜你喜欢

转载自blog.csdn.net/m0_37561165/article/details/81384396