题目描述

输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。

思路

  1. 先将数组遍历一次,然后记录奇数的个数(因为奇数在前,偶数在后)
  2. 将数组拷贝出一份副本,然后遍历拷贝的副本
  3. 若是奇数原数组从第一个位置开始覆盖数据,否则从奇数个数的位置开始覆盖数据

Java代码实现

  public void reOrderArray(int [] array) {
        int oddCount = 0;
        int evenCount = 0;

        int[] array2 = array.clone();

        for (int i = 0; i < array.length; i++) {
            if(array[i]%2 == 1){
                oddCount++;
            }
        }

        for (int i = 0; i < array2.length; i++) {
            if(array2[i]%2 == 1){
                array[evenCount++] = array2[i];
            }else{
                array[oddCount++] = array2[i];
            }
        }
    }

Golang代码实现

func reOrderArray(nums []int){
    nums2 := make([]int,len(nums))
    copy(nums2,nums)
    oddCount := 0
    evenCount := 0
    for i:=0; i< len(nums); i++ {
        if nums[i]%2 == 1{
            oddCount++;
        }
    }

    for i:=0; i<len(nums2);i++{
        if nums2[i]%2 == 0{
            nums[oddCount] = nums2[i]
            oddCount++
        }else {
            nums[evenCount] = nums2[i]
            evenCount++
        }
    }
}