剑指offer:Python 调整顺序使得奇数位于偶数的前面 最全方法和思路解析

题目描述

输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。

思路和Python实现

  • 【思路一】一般拿到这个题目,马上就会想到用遍历的方式,遍历两次,每次都添加到一个新数组中,然后返回数组即可,如下↓↓↓这种方式时间复杂度为O(n)
class Solution:
    def reOrderArray(self, array):
        # write code here
        new_num = []
        for j in range(len(array)):
            if array[j] & 1 == 1:
                new_num.append(array[j])
        for i in range(len(array)):
            if array[i] & 1 == 0:
                new_num.append(array[i])
        return new_num
'''
运行时间和内存分别为:29 ms	5736K 
'''
# 也可以 用lambda 表达式来做,企业喜欢看到你用lambda
def reOrderArray(array):
    return sorted(array, key=lambda c: c % 2, reverse=True)


array = [10, 8, 5, 2, 3, 4, 6]
print(reOrderArray(array)) # [5, 3, 10, 8, 2, 4, 6]
  • 【思路二】最铁憨憨的做法!直接遍历数组,判断一个数的前和后的数 是 奇数还是偶数(将第一个索引为0的数单独拿出来,从索引为1才有前后),该数前面是奇数不交换位置,是偶数交换位置
def reOrderArray(array
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值