zoukankan      html  css  js  c++  java
  • 剑指Offer-13.调整数组顺序使奇数位于偶数前面(C++/Java)

    题目:

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

    分析:

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

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

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

    程序:

    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++;
                }
            }
        }
    }
  • 相关阅读:
    hdu 5446 Unknown Treasure lucas和CRT
    Hdu 5444 Elven Postman dfs
    hdu 5443 The Water Problem 线段树
    hdu 5442 Favorite Donut 后缀数组
    hdu 5441 Travel 离线带权并查集
    hdu 5438 Ponds 拓扑排序
    hdu 5437 Alisha’s Party 优先队列
    HDU 5433 Xiao Ming climbing dp
    hdu 5432 Pyramid Split 二分
    Codeforces Round #319 (Div. 1) B. Invariance of Tree 构造
  • 原文地址:https://www.cnblogs.com/silentteller/p/11868628.html
Copyright © 2011-2022 走看看