python-leetcode-922. 按奇偶排序数组 II

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

可以使用双指针方法来解决这个问题:

  1. 使用一个指针 evenIndex 指向偶数索引(0, 2, 4,...)。

  2. 另一个指针 oddIndex 指向奇数索引(1, 3, 5,...)。

  3. 遍历 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),因为原地交换,没有额外的空间消耗。

这个方法确保了偶数放在偶数索引,奇数放在奇数索引,并且不会打乱原数组中的偶数和奇数的相对顺序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值