《剑指offer》 调整数组顺序使得奇数在偶数前面

本题来自《剑指offer》 调整数组顺序使得奇数在偶数前面

题目:

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

思路:

  假设程序功能是黑盒子,现在考虑输入和输出。

  输入:【1,2,3,4,5,6】,数组为空,只有一个元素

  输出:题目要求相对位置不变,【1,3,5,2,4,6】代码一实现,需要借助辅助内存。

       若位置可以变,【1,5,3,4,2,6】 代码二实现,前后指针遍历,前面的偶数和后面的奇数互换即可

C++ Code(2):

class Solution {
public:
    void reOrderArray(vector<int> &array) {
        vector<int> result;
        int left = 0;
        int right = array.size()-1;
        int temp;
        while (left<right){
            while ((left<right)&& !isEven(array[left])){    //前指针向后移动直到遇到奇数
                left++;
            }
            while((left<right)&& isEven(array[right])){     //后指针向前移动直到遇到偶数
                right--;
            }
            if (left<right){                                //走到这一步,说明前指向了偶数,后指针指向了奇数
                temp = array[left];
                array[left] = array[right];
                array[right] = temp;
            }
        }
    }
    bool isEven(int num){                                    //判断奇偶数
        return (num&1)==0;
    }
};

C++ Code(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;
    }
};

总结:

原文地址:https://www.cnblogs.com/missidiot/p/10783372.html