九度 1516 调整数组顺序使奇数位于偶数前面

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StreamTokenizer;

public class Main{

    /**
     * @param args
     * @throws IOException
     */
    public static void main(String[] args) throws IOException {
        //System.setIn(new FileInputStream("data.in"));
        StreamTokenizer in = new StreamTokenizer(new BufferedReader(
                new InputStreamReader(System.in)));
        while (in.nextToken() != StreamTokenizer.TT_EOF) {
            int n = (int) in.nval;
            int evenIndex = 0, oddIndex = 0;
            int[] evenArr = new int[n];
            int[] oddArr = new int[n];
            for (int i = 0; i < n; i++) {
                in.nextToken();
                int m = (int) in.nval;
                if ((m & 1) == 0) {
                    evenArr[evenIndex++] = m;
                } else {
                    oddArr[oddIndex++] = m;
                }
            }
            for (int i = 0; i < oddIndex; i++) {
                if (i > 0) {
                    System.out.print(" ");
                }
                System.out.print(oddArr[i]);
            }
            if (oddIndex > 0) {
                System.out.print(" ");
            }
            for (int i = 0; i < evenIndex; i++) {
                if (i > 0) {
                    System.out.print(" ");
                }
                System.out.print(evenArr[i]);
            }
            System.out.println();

        }
    }
}

扩展:当不需要关注奇偶数原来的顺序时

package com.wangzhu.algorithm;

import java.util.Arrays;
import java.util.Scanner;

public class ArrayOddEvenMove {

    public static void main(String[] args) {
        Scanner cin = new Scanner(System.in);
        while(cin.hasNext()){
            int n = cin.nextInt();
            int[] arr = new int[n];
            while(cin.hasNext()){
                for(int i = 0;i < n;i ++){
                    arr[i] = cin.nextInt();
                }
                execute1(arr);
                System.out.println(Arrays.toString(arr));
            }
        }
    }

    public static void execute1(int[] arr){
        //记录奇数的当前位置
        int start = -1;
        for(int i = 0, len = arr.length;i < len;i ++){
            if(!isEven(arr[i])){
                //当找到一个奇数,则将当前的位置的数交换到连续奇数后面
                start ++;
                swap(i, start, arr);
            }
        }
    }

    public static void execute(int[] arr){
        int left = 0, right = arr.length - 1;
        while(left < right){
            while(left < right && !isEven(arr[left])){
                left ++;
            }

            while(left < right && isEven(arr[right])){
                --right;
            }

            if(left <right){
                swap(left, right, arr);
            }
        }
    }

    private static boolean isEven(int num) {
        return (num & 1) == 0;
    }

    private static void swap(int i, int j, int[] arr){
        int tmp = arr[i];
        arr[i] = arr[j];
        arr[j] = tmp;
    }
}

参考:

http://www.cnblogs.com/xing901022/p/3755795.html

http://blog.chinaunix.net/uid-26548237-id-3753247.html

http://www.cnblogs.com/kaituorensheng/p/3607118.html

时间: 2024-10-10 00:03:09

九度 1516 调整数组顺序使奇数位于偶数前面的相关文章

[Jobdu] 题目1516 : 调整数组顺序使奇数位于偶数前面

void adjustArray(int a[], int n) { int low = 0, high = n - 1; int pivot; while (low < high) { while (a[high] % 2 == 0 && low < high) high--; while (a[low] % 2 == 1 && low < high) low++; pivot = a[low]; a[low] = a[high]; a[high] =

九度oj 题目1516:调整数组顺序使奇数位于偶数前面

题目1516:调整数组顺序使奇数位于偶数前面 时间限制:1 秒 内存限制:128 兆 特殊判题:否 提交:3416 解决:1091 题目描述: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变. 输入: 每个输入文件包含一组测试案例.对于每个测试案例,第一行输入一个n,代表该数组中数字的个数.接下来的一行输入n个整数.代表数组中的n个数. 输出: 对应每个测试案例,输入一行n

剑指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,代表该数组

【数组】调整数组顺序使奇数位于偶数前面

1. 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分. 1 /** 2 * 调整数组顺序使奇数位于偶数前面 3 * 4 * @author 5 * 6 */ 7 public class Solution { 8 9 public static void order(int[] array) { 10 11 if (null == array || array.length == 0 || array.length ==

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

// 面试题14_调整数组顺序使奇数位于偶数前面.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> using namespace std; void swap(int *begin,int *end) { int temp; temp=*begin; *begin=*end; *end=temp; } void ReorderOddEven(int *pData,unsigned int len

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

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

【面试题014】调整数组顺序使奇数位于偶数前面

[面试题014]调整数组顺序使奇数位于偶数前面    输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数     位于    数组的前半部分,所有偶数位于数组的后半部分. 1.第一个指针初始化为指向数组的第一个数字,他向后移动 2.第二个指针初始化为指向数组的最后一个数字,他向前面移动, 3.在两个指针相遇之前,第一个指针总是位于第二个指针的前面, 4.如果第一个指针指向的数字是偶数,并且第二个指针指向的数字是奇数, 我们就交换两个数字,否者如果是一个满足,或者都不满足就按照规

【编程题目】调整数组顺序使奇数位于偶数前面

54.调整数组顺序使奇数位于偶数前面(数组).题目:输入一个整数数组,调整数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分.要求时间复杂度为 O(n). 小题,秒灭. /* 54.调整数组顺序使奇数位于偶数前面(数组). 题目:输入一个整数数组,调整数组中数字的顺序,使得所有奇数位于数组的前半部分, 所有偶数位于数组的后半部分.要求时间复杂度为 O(n). */ #include <stdio.h> #include <algorithm> using