方法一:双指针

思路:采用对撞双指针的思想

步骤:

  1. odd指向从头开始的奇数元素,even指向数组从后向前开始的偶数元素
  2. 循环:
    1. 如果odd指向奇数元素并且even指向偶数元素就进行交换
    2. 否则就跳过
  1. func sortArrayByParity(nums []int) []int {
  2. //odd指向前面的奇数元素
  3. //even指向后面的偶数元素
  4. odd, even := 0, len(nums)-1
  5. for odd < even {
  6. //如果odd指向偶数元素就跳过
  7. for odd < even && nums[odd] & 1 != 1 {
  8. odd++
  9. }
  10. //如果even指向奇数元素就跳过
  11. for odd < even && nums[even] & 1 != 0 {
  12. even--
  13. }
  14. //如果odd指向奇数,even指向偶数就进行交换
  15. nums[odd], nums[even] = nums[even], nums[odd]
  16. }
  17. return nums
  18. }