📅  最后修改于: 2023-12-03 15:07:36.684000             🧑  作者: Mango
本文将介绍如何实现在 1 到 N 的数组中向右旋转所有奇数和向左旋转所有偶数。
我们可以使用双指针的方式,从数组两头开始遍历。
当左指针指向偶数,右指针指向奇数时,将两个数交换。
当左指针指向奇数,右指针指向奇数时,将右指针向左移。
当左指针指向偶数,右指针指向偶数时,将左指针向右移。
遍历结束后,所有奇数都被向右旋转,所有偶数都被向左旋转。
def rotate_odd_even(n: int, arr: List[int]) -> List[int]:
left, right = 0, n-1
while left < right:
if arr[left] % 2 == 0 and arr[right] % 2 == 1:
arr[left], arr[right] = arr[right], arr[left] # 交换偶数和奇数
if arr[left] % 2 == 1:
left += 1 # 左指针向右移
if arr[right] % 2 == 0:
right -= 1 # 右指针向左移
return arr
assert rotate_odd_even(5, [1, 2, 3, 4, 5]) == [2, 1, 4, 3, 5]
assert rotate_odd_even(6, [1, 2, 3, 4, 5, 6]) == [2, 1, 4, 3, 6, 5]
assert rotate_odd_even(4, [1, 3, 5, 7]) == [1, 3, 5, 7]
assert rotate_odd_even(4, [2, 4, 6, 8]) == [8, 6, 4, 2]