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

题目描述一、

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

题目解读

  • 剑指Offer 129

代码

#include<iostream>
#include<vector>
using namespace std;

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

    void reOrderArray(vector<int> &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<int> create(vector<int> 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<int> array){
        for(int i=0; i < array.size(); i++){
            cout<<array[i]<<" ";
        }
        cout<<endl;
    }
};

main(){
    Solution ss;
    vector<int> 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<iostream>
#include<vector>
using namespace std;

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

    void reOrderArray(vector<int> &array) {
        vector<int> qi;
        vector<int> 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<int> create(vector<int> 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<int> array){
        for(int i=0; i < array.size(); i++){
            cout<<array[i]<<" ";
        }
        cout<<endl;
    }
};

main(){
    Solution ss;
    vector<int> array;

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

总结展望

  • 题目还好
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容