剑指Offer——调整数组顺序使奇数位于偶数前面
1、题目描述
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
2、代码实现
1 package com.baozi.offer; 2 3 import java.util.Arrays; 4 5 /** 6 * 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分, 7 * 所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。 8 * 9 * @author BaoZi 10 * @create 2019-07-11-15:26 11 */ 12 public class Offer10 { 13 public static void main(String[] args) { 14 int[] array = new int[]{1, 2, 4, 6, 3, 7, 9}; 15 Offer10 offer10 = new Offer10(); 16 offer10.reOrderArray(array); 17 System.out.println(Arrays.toString(array)); 18 } 19 20 public void reOrderArray(int[] array) { 21 //定义两个ArrayList变量,分别存放数组中的基数和偶数 22 java.util.ArrayList<Integer> list1 = new java.util.ArrayList<>(); 23 java.util.ArrayList<Integer> list2 = new java.util.ArrayList<>(); 24 for (int i = 0; i < array.length; i++) { 25 //任何一个数和1进行与操作之后,如果是偶数最后的结果就是全零,如果是奇数最后的结果就是为1 26 if ((array[i] & 1) != 1) { 27 list1.add(array[i]); 28 } else { 29 list2.add(array[i]); 30 } 31 } 32 int index = 0; 33 //根据题目的要求,数组中的奇数全部位于偶数的前面,所以先要把list2中的元素存入到原数组中 34 for (int i = 0; i < list2.size(); i++) { 35 array[index] = list2.get(i); 36 index++; 37 } 38 //然后再把偶数全部存入到原数组中 39 for (int i = 0; i < list1.size(); i++) { 40 array[index] = list1.get(i); 41 index++; 42 } 43 } 44 }