Leetcode Link: 剑指 Offer 21. 调整数组顺序使奇数位于偶数前面 - 力扣(LeetCode)
题目

解法一:同向双指针
思路:
一个指针 bound,用来指示前面奇数的边界(含)
一个指针 p,用来指示当前遍历位置
- 当前为奇数:
bound++,并且nums[bound]和nums[p] - 为偶数:无操作
题解:
class Solution:
def exchange(self, nums: List[int]) -> List[int]:
p = 0
bound = -1
while(p<len(nums)):
if nums[p] % 2 == 1:
bound += 1
nums[bound], nums[p] = nums[p] ,nums[bound]
p += 1
return nums解法二:对向双指针
思路:
定义奇数边界 left 和偶数边界 right,其中奇数边界不含边界,偶数边界含边界。
小于奇数边界的都是奇数,大于偶数边界的都是偶数。
题解:
class Solution:
def exchange(self, nums: List[int]) -> List[int]:
left = 0 # 奇数边界,不含
right = len(nums) # 偶数边界,含
while(left != right):
if nums[left] % 2 == 1:
left += 1
else:
right -= 1
nums[left], nums[right] = nums[right], nums[left]
return nums
启发和联系
无论使用哪种策略,务必注意边界是否包含,以及while 内的跳出条件,一定要做到无遗漏,无重复!