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