输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。
思路1:垃圾解法
class Solution:
def exchange(self, nums: List[int]) -> List[int]:
res=[]
for num in nums:
#偶数
if num%2 == 0:
res = res+[num]
#奇数
else:
res = [num]+res
return res
思路2:双指针
(在原数组上修改)
设置两个指针start = 0,end = len(nums) - 1分别指向数组的头和尾
如果头尾对应的数分别为奇偶,那么start右移一位,end左移一位
如果头尾对应的数分别为偶奇,那么交换两个指针所对应的元素
如果头尾对应的数分别为奇奇,那么start右移一位
如果头尾对应的数分别为偶偶,那么end左移一位
时间复杂度O(n),空间复杂度O(1)
class Solution:
def exchange(self, nums: List[int]) -> List[int]:
low = 0
high = len(nums)-1
while low < high:
# 偶奇
if nums[low] & 1 == 0 and nums[high] & 1 ==1:
nums[low], nums[high] = nums[high], nums[low]
low+=1
high-=1
# 奇奇
elif nums[low] & 1 == 1 and nums[high] & 1 ==1:
low+=1
# 偶偶
elif nums[low] & 1 == 0 and nums[high] & 1 ==0:
high-=1
# 奇偶
else:
low+=1
high-=1
return nums