Leetcode922: 按奇偶排序数组 II
题目描述:
给定一个非负整数数组 nums
, nums
中一半整数是 奇数 ,一半整数是 偶数 。
对数组进行排序,以便当 nums[i]
为奇数时,i
也是 奇数 ;当 nums[i]
为偶数时, i
也是 偶数 。
你可以返回 任何满足上述条件的数组作为答案 。
代码思路:
- 初始化两个列表:
odd
:用于存储数组中的奇数。even
:用于存储数组中的偶数。
- 遍历输入数组
nums
:- 对于每个元素
num
,检查它是奇数还是偶数。 - 如果是偶数,则将其添加到
even
列表中。 - 如果是奇数,则将其添加到
odd
列表中。
- 对于每个元素
- 初始化结果数组和索引:
ans
:用于存储最终的排序结果。oidx
:奇数列表odd
的索引,用于跟踪下一个要添加到结果数组中的奇数。eidx
:偶数列表even
的索引,用于跟踪下一个要添加到结果数组中的偶数。
- 重新填充结果数组:
- 遍历输入数组
nums
的索引范围(即len(nums)
次)。 - 对于每个索引
i
:- 如果
i
是偶数(i % 2 == 0
),则从even
列表中取出下一个偶数(使用oidx
索引)并添加到ans
中,然后递增oidx
。 - 如果
i
是奇数,则从odd
列表中取出下一个奇数(使用eidx
索引)并添加到ans
中,然后递增eidx
。
- 如果
- 遍历输入数组
- 返回结果:
- 最终,
ans
数组将包含按要求排序的元素,其中所有偶数位于偶数索引上,所有奇数位于奇数索引上,同时保持了它们各自的相对顺序。返回这个数组作为结果。
- 最终,
代码实现:
class Solution:
def sortArrayByParityII(self, nums: List[int]) -> List[int]:
odd, even = [], []
for num in nums:
if num % 2 == 0: # 偶数
even.append(num)
else: # 奇数
odd.append(num)
ans = []
oidx, eidx = 0, 0
for i in range(len(nums)):
if i % 2 == 0:
ans.append(even[oidx])
oidx += 1
else:
ans.append(odd[eidx])
eidx += 1
return ans