<剑指Offer>面试题21: 调整数组顺序使奇数位于偶数前面

题目描述一、

  • 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,
  • 使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,

题目解读

  • 剑指Offer 129

代码

#include
#include
using namespace std;

class Solution {
public:
    bool par(int x){
        return x&1; // 偶数返回0,奇数返回1
    }

    void reOrderArray(vector &array) {
        int left = 0;
        int right = array.size() - 1;
        int temp;

        while(left < right){
            // 从前到后找偶数,碰到奇数跳过
            while(left < right && par(array[left])){
                left ++;
            }

            // 从后往前找奇数,碰到偶数跳过
            while(left < right && !par(array[right])){
                right --;
            }

            if(left < right){
                temp = array[left];
                array[left] = array[right];
                array[right] = temp;
            }
        }
    }

    vector create(vector array){
        array.push_back(1);
        array.push_back(2);
        array.push_back(3);
        array.push_back(4);
        array.push_back(5);
        array.push_back(6);
        array.push_back(7);

        return array;
    }

    void print_vector(vector array){
        for(int i=0; i < array.size(); i++){
            cout< array;

    array = ss.create(array);
    ss.print_vector(array);
    ss.reOrderArray(array);
    ss.print_vector(array);
}

题目描述二、

  • 输入一个整数数组,实现一个函数来调整该数组中数字的顺序
  • 使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分
  • 并保证奇数和奇数,偶数和偶数之间的相对位置不变 (例如:输入[1, 2, 3, 4, 5, 6, 7],输出为: [1, 3, 5, 7, 2, 4, 6])

题目解读

  • 剑指Offer 上没有题目描述中的第三行话
  • 题目思路是:新建两个数组存放奇数和偶数,然后将奇输数组和偶数数组分别放到array数组中去

代码

#include
#include
using namespace std;

class Solution {
public:
    bool par(int x){
        return x&1; // 偶数返回0,奇数返回1
    }

    void reOrderArray(vector &array) {
        vector qi;
        vector ou;

        for(int i=0; i < array.size(); i++){
            if(par(array[i])){
                qi.push_back(array[i]);
            }
            else{
                ou.push_back(array[i]);
            }
        }

        int qi_len = qi.size();
        for(int i=0; i < qi_len; i++){
            array[i] = qi[i];
        }

        int ou_len = ou.size();
        for(int i=0; i < ou_len; i++){
            array[qi_len + i] = ou[i];
        }
    }

    vector create(vector array){
        array.push_back(1);
        array.push_back(2);
        array.push_back(3);
        array.push_back(4);
        array.push_back(5);
        array.push_back(6);
        array.push_back(7);

        return array;
    }

    void print_vector(vector array){
        for(int i=0; i < array.size(); i++){
            cout< array;

    array = ss.create(array);
    ss.print_vector(array);
    ss.reOrderArray(array);
    ss.print_vector(array);
}
<剑指Offer>面试题21: 调整数组顺序使奇数位于偶数前面_第1张图片

总结展望

  • 题目还好

你可能感兴趣的:(<剑指Offer>面试题21: 调整数组顺序使奇数位于偶数前面)