阅读目录
题目描述
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
思路和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