题目描述
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
方法一:
运行时间:30ms
占用内存:5660k
# -*- coding:utf-8 -*-
class Solution:
def reOrderArray(self, array):
# write code here
# 方法一:就是遍历(低级做法,费时,费空间)
a = []
b = []
for i in range(len(array)):
if array[i]%2 == 0:
b.append(array[i])
else:
a.append(array[i])
return a+b
方法二:
# -*- coding:utf-8 -*-
class Solution:
def reOrderArray(self, array):
# write code here
# 方法二:一个从头开始扫,一个从尾开始扫,不过顺序会颠倒
i = 0
j = len(array) - 1
while i < j:
while array[i]%2 != 0 and i < j:
i +=1
while array[j]%2 == 0 and i < j:
j -= 1
array[i] , array[j] = array[j] , array[i]
return array
如果要加上一个扩展性,就是如果问题从奇数偶数改为正负,零或非零,还可以写成一下形式。
def reOrderArray( array):
# write code here
# 方法二:一个从头开始扫,一个从尾开始扫,不过顺序会颠倒
i = 0
j = len(array) - 1
while i < j:
while even_or_odd(array[i]) and i < j:
i += 1
while not even_or_odd(array[j]) and i < j:
j -= 1
array[i], array[j] = array[j], array[i]
return array
def even_or_odd(n):
if n % 2 == 0:
return False
else:
return True
print(reOrderArray([1,2,3]))