思路:双指针
- 左指针
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