day21 JZ21 调整数组顺序使奇数位于偶数前面(一)(Java)

102 阅读1分钟

题目来源: JZ21 调整数组顺序使奇数位于偶数前面(一)

题目描述:

  • 描述: 输入一个长度为 n 整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前面部分,所有的偶数位于数组的后面部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。 数据范围: 0≤n≤5000,数组中每个数的值 0≤val≤10000

  • 要求: 时间复杂度 O(n),空间复杂度 O(n)

  • 进阶: 时间复杂度 O(n2n^2),空间复杂度 O(1)

示例1:
输入:[1,2,3,4]
输出:[1,3,2,4]

思路

插入排序思想:记录已经是奇数的位置下标(视作为有序区域),然后向后遍历,一经发现是奇数则进行 “插入排序” ,然后有序区下标加1。

具体实现:

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param array int整型一维数组 
     * @return int整型一维数组
     */
//使用插入排序的思想
    public int[] reOrderArray (int[] array) {
        // 首先是对数值长度进行特判
        if(array==null||array.length==0) return array;
          //记录已经是奇数的位置
        int j=0;
        int temp = 0;
        for(int i =0;i<array.length;i++){
            temp = array[i];
            //如果该值为偶数
            if(array[i]%2==0){
                continue;
            }else{//该值为奇数
                int k =i;
                while(k>j){
                    //这区间整体向后移动一位
                    array[k] = array[k-1];
                    k--;
                }
                //移位之后将对应的值赋值
                array[k] = temp;
                j++;
            }
        }
        //返回结果数数组
        return array;
    }
}