剑指offer10-调整数组顺序使奇数位于偶数前面

212 阅读2分钟

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

题目描述

输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
思路
  • 首先建立一个栈,用于存储偶数;然后遍历原数组,遇到奇数则按顺序重新为原数组赋值,遇到偶数则压入栈;最后将栈中的偶数弹出,并依次从原数组最后一个元素开始赋值。

程序

     /**
     * code1
     * 时间复杂度:O(n)
     * 空间复杂度:
     */
import java.util.Stack;
public class Solution {
    public void reOrderArray(int [] array) {
        Stack<Integer> stack = new Stack<Integer>();
        if(array.length==0){
             return;
        }
        if(array.length==1){
            return;
        }
        int j=0;
        int p=array.length-1;
        for(int i=0;i<array.length;i++){
            if((array[i]&1)==1){
                array[j++]=array[i];
            }else{
                stack.push(array[i]);
            }
        }
        while(!stack.empty()){
            array[p--]=stack.pop();
        }
    }
}

补充

  1. 数组输出方式
    (1).一维数组int[] array = {1,2,3,4,5,6};
    1). for循环

    for(int i=0;i<array.length;i++)
    {
          System.out.println(a[i]);
    }
    

    2). foreach

    for(数据类型 变量|集合){
        //循环体代码,循环次数为代码长度
    }
    
    for(int a:array)
        System.out.println(a + "、");
    

    3). 调用Arrays包

    import java.util.Arrays;
    System.out.println(Arrays.toString(array));
    

    (2).二维数组int[][]arr = {{1,2,3}, {4,5,6}, {7,8,9}};
    1). for循环

    for(int i=0;i<arr.length;i++)
         {
        	 for(int j=0;j<arr[i].length;j++)
        	 {
        		 System.out.print(arr[i][j]+" ");
        	 }
        	 System.out.println();	//换行
         }
    

    2). foreach

    for(int[] a:arr)
     {
    	 for(int b:a)
    	 {
    		 System.out.print(b+" ");
    	 }
    	 System.out.println();//换行
     }
    

    3). 调用Arrays包

    import java.util.Arrays;
    for(int i=0;i<arr.length;i++)
        System.out.println(Arrays.toString(arr[i]));
    
  2. 包装 基本数据类型进行包装处理后可以像对象一样进行引用传递,同时可以使用Object类进行接收。java设计了8个包装类,可以分为两种类型:
    (1). 对象型包装类(Object直接子类):Boolean(boolean)、Character(char)
    (2). 数值型包装类(Number直接子类):Byte(byte)、Short(short)、Integer(int)、Long(long)、Float(float)、Double(double)