剑指offer-调整数组顺序使奇数位与偶数前面

题目描述

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

1、奇数和奇数,偶数和偶数之间的相对位置改变。

public class Test {
    public static void main(String[] args) {
        int[] array = { 2, 4, 5, 8, 1, 3, 7, 0};
        Test.reOrderArray(array);
        for(int i=0; i<array.length; i++) {
            System.out.print(array[i]);
        }
    }    

    /**
     * 维护两个指针,第一个指针初始化时指向数组的第一个数字,
     * 它只向后移动:第二个指针初始化时指向数组的最后一个数字, 它只向前移动。
     * 在两个指针相遇之前,第一个指针总是位于第二个指针的前面。
     * 如果第一个指针指向的数字是偶数,并且第二个指针指向的数字是奇数,我们就交换这两个数字。
     * @param array
     */
    public static void reOrderArray(int[] array) {
        // 数组为空或者数组长度小于2
        if(array == null || array.length < 2)
            return;

        int start = 0;
        int end = array.length - 1;
        while(start < end) {
            // 从左往右找偶数
            while((array[start] & 1) != 0) {
                start ++;
            }
            // 从右往左找奇数
            while((array[end] & 1) != 1) {
                end --;
            }

            if(start < end) {
                int temp = array[start];
                array[start] = array[end];
                array[end] =temp;
            }
        }
    }

}

2、奇数和奇数,偶数和偶数之间的相对位置不变。

import java.util.ArrayList;

public class Test {

    public static void main(String[] args) {
        int[] array = { 2, 4, 5, 8, 1, 3, 7, 0};
        Test.reOrderArray(array);
        for(int i=0; i<array.length; i++) {
            System.out.print(array[i]);
        }
    }

    /**
     * 保证奇数与奇数,偶数与偶数相对位置不变
     * @param array
     */
    public static void reOrderArray(int[] array) {
        // 数组为空或者数组长度小于2
        if(array == null || array.length < 2)
            return;

        ArrayList<Integer> evenList = new ArrayList<Integer>();  // 存放奇数
        ArrayList<Integer> oddList = new ArrayList<Integer>();   // 存放偶数

        for(int i=0; i< array.length; i++) {
            if((array[i] & 1) == 0) {
                evenList.add(array[i]);
            } else {
                oddList.add(array[i]);
            }
        }

        for(int i=0; i<array.length; i++) {
            if(i < oddList.size()) {
                array[i] = oddList.get(i);
            } else {
                array[i] = evenList.get(i - oddList.size());
            }
        }
    }
}
时间: 2025-01-18 06:03:45

剑指offer-调整数组顺序使奇数位与偶数前面的相关文章

剑指offer——调整数组顺序使奇数位于偶数前面

题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变. 看代码: public class Solution { public static void reOrderArray(int[] arr) { int i,j,target; for (i = 1 ; i< arr.length; i++) { target = arr[i]; if (target%2!=0)

剑指OFFER之调整数组顺序使奇数位于偶数前面找(九度OJ1516)

题目描述: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变. 输入: 每个输入文件包含一组测试案例.对于每个测试案例,第一行输入一个n,代表该数组中数字的个数.接下来的一行输入n个整数.代表数组中的n个数. 输出: 对应每个测试案例,输入一行n个数字,代表调整后的数组.注意,数字和数字之间用一个空格隔开,最后一个数字后面没有空格. 样例输入: 5 1 2 3 4 5 样例输

【剑指Offer面试题】 九度OJ1516:调整数组顺序使奇数位于偶数前面

题目链接地址: http://ac.jobdu.com/problem.php?pid=1516 题目1516:调整数组顺序使奇数位于偶数前面 时间限制:1 秒内存限制:128 兆特殊判题:否提交:2858解决:924 题目描写叙述: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得全部的奇数位于数组的前半部分,全部的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变. 输入: 每一个输入文件包括一组測试案例. 对于每一个測试案例.第一行输入一个n,代表该数组

【剑指offer】Q14:调整数组顺序使奇数位于偶数前面

def isOdd(n): return n & 1 def Reorder(data, cf = isOdd): odd = 0 even = len( data ) - 1 while True: while not isOdd( data[ even ]) : even -= 1 while isOdd( data[ odd ]) : odd += 1 if odd >= even: break data[ even ], data[ odd ] = data[ odd ], data

《剑指Offer》题目:调整数组顺序使奇数位于偶数前面

题目描述:调整数组顺序使奇数位于偶数前 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变. 题目分析: 题目的关键在于在移位以后,奇数和奇数以及偶数和偶数之间的相对位置保持不变. Java代码: public class ReOrderArray { //这种方法不能保证奇数和奇数,偶数和偶数之间的相对位置不变 public static void reOrderArray(

剑指Offer面试题:13.调整数组顺序使奇数位于偶数前面

一.题目:调整数组顺序使奇数位于偶数前面 题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分. 例如有以下一个整数数组:12345,经过调整后可以为:15342.13542.13524等等. 二.解题思路 2.1 基本解法 如果不考虑时间复杂度,最简单的思路应该是从头扫描这个数组,每碰到一个偶数时,拿出这个数字,并把位于这个数字后面的所有数字往前挪动一位.挪完之后在数组的末尾有一个空位,这时把该偶数放入这个空位.由于每碰到一个

《剑指offer》第二十一题:调整数组顺序使奇数位于偶数前面

// 面试题21:调整数组顺序使奇数位于偶数前面 // 题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有 // 奇数位于数组的前半部分,所有偶数位于数组的后半部分. #include <cstdio> void Reorder(int* pData, unsigned int length, bool (*func)(int)); bool isEven(int n); // ====================方法一==================== void

剑指offer-数值的整数次方-调整数组顺序使奇数位于偶数前面-代码的完整性-python

题目描述 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 保证base和exponent不同时为0 思路 求base的exponent次方,exponent有两种可能性, exponent>0 for循环exponent次,结果与base相乘 exponent<0 for循环exponent次,结果与base相除 输出结果: # -*- coding:utf-8 -*- class Solution: def Power(self

面试题 14:调整数组顺序使奇数位于偶数前面

使用两个指针,在数组头尾相对移动: 循环结束条件:头和尾重叠活着头在尾之后 左边指针右移条件:当前数是奇数 右边指针左移条件:当前数是偶数 当且仅当左边指针是偶数,右边指针是奇数,交换两个指针的值 此题注意扩展,函数功能的重用. package offer; import java.util.Arrays; /*面试题 14:调整数组顺序使奇数位于偶数前面 题目:输入一个整数数组,实现一个函数来调整该函数数组中数字的顺序,使得所有奇数位于数组的前半部分,所有的数组位于数组的后半部分.*/ pub