题目描述
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
错误做法:未考虑顺序不变
def reOrderArray(self, array): # write code here left = 0 right = len(array) - 1 flag_l = 0 flag_r = 0 while left < right: if flag_l == 1 and flag_r == 1: array[left], array[right] = array[right], array[left] if array[left] % 2 == 0: flag_l = 1 else: left += 1 flag_l = 0 if array[right] % 2 != 0: flag_r = 1 else: right -= 1 flag_r = 0 return array
考虑顺序变化,使用额外空间,一个存奇数,一个存偶数:
o = [] e = [] for i in array: if i % 2 == 1: o.append(i) else: e.append(i) return o + e
不使用额外空间,前奇数后偶数就交换,类似冒泡排序,复杂度O(n*2):
for i in range(0,len(array)): for j in range(len(array)-1,i,-1): if array[j-1]%2 ==0 and array[j]%2==1: array[j],array[j-1] = array[j-1], array[j] return array