922. 按奇偶排序数组 II - 力扣(LeetCode)


可以使用双指针方法来解决这个问题:
-
使用一个指针
evenIndex指向偶数索引(0, 2, 4,...)。 -
另一个指针
oddIndex指向奇数索引(1, 3, 5,...)。 -
遍历
nums,如果nums[evenIndex]是奇数,或者nums[oddIndex]是偶数,就交换它们。
以下是 Python 代码实现:
def sortArrayByParityII(nums):
n = len(nums)
evenIndex, oddIndex = 0, 1
while evenIndex < n and oddIndex < n:
if nums[evenIndex] % 2 == 0:
evenIndex += 2
elif nums[oddIndex] % 2 == 1:
oddIndex += 2
else:
nums[evenIndex], nums[oddIndex] = nums[oddIndex], nums[evenIndex]
evenIndex += 2
oddIndex += 2
return nums
# 示例测试
nums = [4, 2, 5, 7]
print(sortArrayByParityII(nums)) # 示例输出:[4, 5, 2, 7]
复杂度分析:
-
时间复杂度:O(n),因为只需遍历数组一次。
-
空间复杂度:O(1),因为原地交换,没有额外的空间消耗。
这个方法确保了偶数放在偶数索引,奇数放在奇数索引,并且不会打乱原数组中的偶数和奇数的相对顺序。
232

被折叠的 条评论
为什么被折叠?



