码迷,mamicode.com
首页 > 编程语言 > 详细

剑指Offer-13.调整数组顺序使奇数位于偶数前面(C++/Java)

时间:2019-11-15 18:31:38      阅读:71      评论:0      收藏:0      [点我收藏+]

标签:tor   偶数   需要   程序   交换   位置   temp   很多   solution   

题目:

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

分析:

这道题做法有很多,首先可以创建一个新的数组,遍历原数组两遍,先把奇数依次传入新数组中,再把偶数传入进去,这样可以保持数字的相对位置不变。

当然如果不需要额外空间的话,也可以在原数组上进行操作,可以从后往前遍历数组,将偶数依次放置数组尾部,并把之前的元素依次向前移动,当然也可以从前遍历先找到一个偶数,再找到这个偶数后面的第一个奇数,将奇数放置在偶数的位置,这两个数中间的所有元素(包括偶数)依次向后移动,总之题目需要保持相对位置不变,只能够将多个元素依次移动,或者相邻两个元素交换。

如果去掉保持相对位置这一条件,只需要使用头尾指针,将偶数和奇数直接交换即可。

程序:

C++

class Solution {
public:
    void reOrderArray(vector<int> &array) {
        vector<int> res;
        for(int i = 0; i < array.size(); ++i){
            if((array[i] & 1) != 0)
                res.push_back(array[i]);
        }
        for(int i = 0; i < array.size(); ++i){
            if((array[i] & 1) == 0)
                res.push_back(array[i]);
        }
        array = res;
    }
};

Java

public class Solution {
    public void reOrderArray(int [] array) {
        int count = 0;
        for(int i = array.length-1; i >= 0; --i){
            if((array[i] & 1) == 0){
                int temp = array[i];
                for(int j = i; j < array.length - 1 - count; ++j){
                    array[j] = array[j+1];
                }
                array[array.length - 1 - count] = temp;
                count++;
            }
        }
    }
}

 

剑指Offer-13.调整数组顺序使奇数位于偶数前面(C++/Java)

标签:tor   偶数   需要   程序   交换   位置   temp   很多   solution   

原文地址:https://www.cnblogs.com/silentteller/p/11868628.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!