剑指 Offer 21. 调整数组顺序使奇数位于偶数前面-Python题解

输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。

示例:

输入: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
    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值