import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param nums int整型一维数组 
     * @return int整型一维数组
     */
  // 使用额外空间,时间复杂度O(n)
      public int[] reorderCows(int[] nums) {
        int[] result = new int[nums.length];
        int index = 0;
        int i = 0, j = 0;
        while (i < nums.length) {
            if (nums[i] % 2 == 0) {
                result[index++] = nums[i];
            }
            i++;
        }
        while (j < nums.length) {
            if (nums[j] % 2 != 0) {
                result[index++] = nums[j];
            }
            j++;
        }
        return result;
    }
  // 不使用额外空间的话,就要原地进行交换,时间复杂度O(n2)
      public int[] reorderCows (int[] nums) {
        if (nums == null || nums.length == 0) {
            return null;
        }

        int evenPointer = 0;
        int oddPointer = 0;

        while (oddPointer < nums.length) {
            if (nums[oddPointer] % 2 == 0) { // 当前元素是偶数
                int temp = nums[oddPointer];

                // 将当前元素交换到evenPointer的位置
                for (int i = oddPointer; i > evenPointer; i--) {
                    nums[i] = nums[i - 1];
                }

                nums[evenPointer] = temp;

                // 移动指针
                evenPointer++;
                oddPointer++;
            } else { // 当前元素是奇数
                oddPointer++;
            }
        }
        return nums;
    }
}

本题知识点分析:

1.数组遍历

2.数学模拟

本题解题思路分析:

1.方法一:先取出奇数,再取出偶数,然后放到新数组返回,最直接的想法

2.方法二:当遇到偶数时候,将其他数字进行原地交换,然后temp赋值给最前面的奇数,然后奇偶指针分别向后走,如果元素是奇数,只要偶数指针向后走。类似快慢指针,奇数相当于要被交换的慢指针

本题使用编程语言: Java

如果你觉得本篇文章对你有帮助的话,可以点个赞支持一下,感谢~