题目描述:

给定一个非负整数数组 A,返回一个数组,在该数组中, A 的所有偶数元素之后跟着所有奇数元素。

你可以返回满足此条件的任何数组作为答案。

示例:

输入:[3,1,2,4]

输出:[2,4,3,1]

输出 [4,2,3,1],[2,4,1,3] 和 [4,2,1,3] 也会被接受。

解题思路:

1. 同时定义两个指针,一个指向开头,一个指向结尾。把结尾的偶数换到前面即可
2. i从前往后移动,移到第一个不为偶数的地方
3. j从后向前移动,移动第一个不为奇数的地方
4. 交换位置,同时指针继续向对方靠拢

golang示例代码

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
func SortArrayByParity(nums []int) []int {
    i := 0
    j := len(nums) - 1
    for i < j {
        //1. i从前往后移动,移到第一个不为偶数的地方
        if i < j && nums[i] % 2 == 0 {
            i++
            continue
        }
        //2. j从后向前移动,移动第一个不为奇数的地方
        if i < j && nums[j] % 2 != 0 {
            j--
            continue
        }
        //3. 交换位置,同时指针继续向对方靠拢
        if i < j && nums[i] % 2 != 0 && nums[j] % 2 == 0 {
            nums[i], nums[j] = nums[j], nums[i]
            i++
            j--
        }
    }
    return nums
}