zoukankan      html  css  js  c++  java
  • 剑指offer---调整数组顺序使奇数位于偶数前面

    题目调整数组顺序使奇数位于偶数前面

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

    * 注意:剑指offer中的面试题21 和 牛客网的题目要求不一样,区别在于下划线部分,剑指offer书中没有要求相对位置不变

    class Solution {
    public:
        void reOrderArray(vector<int> &array) {
            
        }
    };

    解题代码:

    (1)相对位置不变的解法:

    借用辅助数组,先将偶数存放到辅助数组中,同时将该偶数从原数组中删除,最后将两个数组合并。

     1 class Solution {
     2 public:
     3     void reOrderArray(vector<int> &array) {
     4         vector<int> temp;
     5         vector<int>:: iterator it;
     6         for(it = array.begin(); it != array.end(); ){
     7             if(*it % 2 == 0){
     8                 temp.push_back(*it);
     9                 it = array.erase(it);
    10             }
    11             else
    12                 it++;
    13         }
    14 
    15         for(it = temp.begin(); it != temp.end(); it++){
    16             array.push_back(*it);
    17         }
    18     }
    19 };

    (2)相对位置可变的解法:

     1 class Solution {
     2 public:
     3     void reOrderArray(vector<int> &array) {
     4         if(array.size() <= 1)
     5             return ;
     6 
     7         int start = 0;
     8         int end = array.size()-1;
     9         while(start < end){
    10             while(start < end && array[start] % 2 == 1)
    11                 start++;
    12             while(start < end & array[end] % 2 == 0)
    13                 end--;
    14 
    15             if(start < end)
    16                 swap(array[start], array[end]);
    17         }
    18     }
    19 };
  • 相关阅读:
    [转]MyBatis传入多个参数的问题
    【转】赶集网mysql开发36军规
    C#套接字和windowsAPI套接字
    java中的注解
    java中的枚举类型
    过去的汇编代码
    近日错误集锦
    java swing模仿随机频谱
    java泛型中的对象
    XML-RPC远程方法调用
  • 原文地址:https://www.cnblogs.com/iwangzhengchao/p/9866215.html
Copyright © 2011-2022 走看看