思路:双指针
- 左指针
left起始值设置为0,右指针right起始值设置为len(nums) - 1 - 不断移动,使得左指针停在左边的第一个偶数上,右指针停在右边的第一个奇数上
 - 两个指针交换所在位置的数字
 - 不断重复这个过程,直到 
left < right这个条件不成立,说明已经全部交换完毕了。 - 双端队列也可以做,但是没有双指针巧妙
代码:python
 
class Solution:    # 双指针    def exchange(self, nums: List[int]) -> List[int]:        left, right = 0, len(nums) - 1        while left < right:            while left < right and (nums[left] & 1):                left += 1            while left < right and not (nums[right] & 1):                right -= 1            # 此时left指向左边第一个偶数,right指向右边第一个奇数            # 交换            temp = nums[left]            nums[left] = nums[right]            nums[right] = temp        return nums