题解 | #调整数组顺序使奇数位于偶数前面(一)#
调整数组顺序使奇数位于偶数前面(一)
http://www.nowcoder.com/practice/ef1f53ef31ca408cada5093c8780f44b
法一:用两个辅助数组
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param array int整型一维数组
# @return int整型一维数组
#
class Solution:
def reOrderArray(self , array: List[int]) -> List[int]:
ji=[]
ou=[]
for i in array:
if i%2==0:
ou.append(i)
else:
ji.append(i)
return ji+ou
时间复杂度O(n):n表示原数组的长度,遍历原数组
空间复杂度O(n):需要n个存储空间
法二:类似插入排序的思想
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param array int整型一维数组
# @return int整型一维数组
#
class Solution:
def reOrderArray(self , array: List[int]) -> List[int]:
for i in range(1,len(array)):
if array[i]%2==1:#只用移动奇数,偶数不用移动
currentvalue=array[i]
pos=i
#对比,移动:当“当前项”的前面一项是偶数时,将“当前项”逐步移动到前面,直到前一项是奇数为止
while pos>0 and array[pos-1]%2==0:#前面一项是偶数
array[pos]=array[pos-1]
pos=pos-1
array[pos]=currentvalue#循环终止则是找到正确位置,在此插入“当前项”
return array
参考陈斌老师插入排序代码
时间复杂度O(n2)
空间复杂度O(1):直接在原数组移动,不需要额外空间。