import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param array int整型一维数组 
     * @return int整型一维数组
     */
    public int[] reOrderArray (int[] array) {
        // write code here
        //方法一:暴力解法,两次遍历数组,第一次遍历,寻找出奇数;第二次遍历,寻找出偶数。
        //时间复杂度:O(n^2),空间复杂度:O(n)
//         int length = array.length;
//         int[] arr = new int[length];
//         int index = 0;
//         //第一次遍历,寻找出奇数
//         for(int i=0;i<length;i++){
//             if(array[i]%2 != 0){
//                 arr[index] = array[i];
//                 index++;
//             }
//         }
        
//         //第二次遍历,寻找出偶数
//         for(int i=0;i<length;i++){
//             if(array[i]%2 == 0){
//                 arr[index] = array[i];
//                 index++;
//             }
//         }
        
//         return arr;
        
        //方法二,数组合并,遍历一次原数组,将奇数和偶数分成两个链表,最后将链表转换为数组。
        //时间复杂度:O(n^2),空间复杂度:O(n)
        ArrayList<Integer> list1 = new ArrayList<>();//存放奇数的链表
        ArrayList<Integer> list2 = new ArrayList<>();//存放偶数的链表
        int length = array.length;
        //遍历,找出奇数和偶数
        for(int i=0;i<length;i++){
            if(array[i]%2==0){
                list2.add(array[i]);
            }else{
                list1.add(array[i]);
            }
        }
        
        list1.addAll(list2);//合并链表
        Object[] obj = list1.toArray();//链表转化为数组,但是不可以直接转换为整形数组,先转换为object类型,然后再一个个转换为整形
        for(int i=0;i<length;i++){
            array[i] = (int)obj[i];
        }
        return array;
    }
}