剑指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 };

 

posted on 2018-10-28 17:13  wangzhch  阅读(176)  评论(0编辑  收藏  举报

导航