输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。
示例:
输入:nums = [1,2,3,4]
输出:[1,3,2,4]
注:[3,1,2,4] 也是正确的答案之一。
提示:
1 <= nums.length <= 50000
1 <= nums[i] <= 10000
class Solution:
def exchange(self, nums: List[int]) -> List[int]:
len_nums = len(nums)
start_index = 0
end_index = len_nums - 1
# 前后两个索引遍历数组,如果前,后部分,不符合要求,则调换位置
while end_index > start_index:
start_index, end_index = self.is_exchange(nums, start_index, end_index)
# print(nums)
return nums
def is_exchange(self, nums, start_index, end_index):
# 是否需要调换位置,如果前面的是偶数,后面是奇数,则需要调换位置,并更新索引
if (nums[start_index] & 1 == 0) and nums[end_index] & 1:
# print(nums[start_index] & 1, nums[end_index] & 1, nums[end_index], nums[start_index])
nums[start_index], nums[end_index] = nums[end_index], nums[start_index]
start_index += 1
end_index -= 1
# 前面是奇数,后面是奇数,则不需要调换位置,更新前面的索引
elif nums[start_index] & 1 and nums[end_index] & 1:
start_index += 1
# 前面是奇数,后面是偶数,则不需要调换位置,更新前后的索引
elif nums[start_index] & 1 and (nums[end_index] & 1 == 0):
start_index += 1
end_index -= 1
# 前面是偶数,后面也是偶数,则不需要调换位置,更新后面的索引
elif (nums[start_index] & 1 == 0) and (nums[end_index] & 1 == 0):
end_index -= 1
return start_index,end_index