剑指offer 13. 调整数组顺序使奇数位于偶数前面
调整数组顺序使奇数位于偶数前面
http://www.nowcoder.com/questionTerminal/beb5aa231adc45b2a5dcc5b62c93f593
题目描述
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
思路
思路1:开辟新的数组,遍历原数组将奇数偶数分别放在新的空间里,最后合并。时间复杂度O(n),开辟了额外的数组空间,空间复杂度O(n)。
思路2:用while来遍历,遇到偶数删除这个偶数,并将其向数组的末尾插入。时间复杂度O(n),没有开辟额外的数组空间,空间复杂度O(1)。勘误:实际上pop(index)的时间复杂度是O(n),删除元素时后面的元素往前移动,总的时间复杂度接近O(n^2)
代码实现
思路1:暴力解
class Solution:
def reOrderArray(self, array):
# write code here
# 暴力解,时间复杂度O(n),开辟了额外的数组空间
odd = []
even = []
for i in array:
if i%2 == 1:
odd.append(i)
else:
even.append(i)
array = odd + even
return array思路2:将偶数尾插入数组
# -*- coding:utf-8 -*-
class Solution:
def reOrderArray(self, array):
# write code here
# 没有额外的数组空间。
# 实际上pop(index)的时间复杂度是O(n),删除元素时后面的元素往前移动,总的时间复杂度接近O(n^2)
lenth = len(array)
move = 0
index = 0
while(lenth - move - index > 0):
if array[index]%2 == 0:
temp = array.pop(index)
array.append(temp)
move += 1
index -= 1
index += 1
return array能力有限,欢迎各位大佬批评指点,交流是进步的阶梯。