剑指offer[21]——调整那个数组顺序使奇数位于偶数前面
题目描述
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
解题思路及相应代码
题目是从牛客网上摘过来的,不同于《剑指Offer》,该题还要求奇数、偶数之间的相对位置不变,所以不能只简单地采用两个指针,具体代码及思路如下:
class Solution:
def reOrderArray(self, mylist):
# write code here
if mylist is None:
return False
odd_num = 0
for i in range(len(mylist)):
if mylist[i] % 2 != 0:
j = i
while j > odd_num: # 正常情况下,奇数数量应当于奇数的位置相对应,即第n个奇数即对应有n个奇数,因此
# 当 j > odd_num 时,出现了偶数位于奇数前面的情况,因此需要调整数组顺序。
tmp = mylist[j-1]
mylist[j-1] = mylist[j]
mylist[j] = tmp
j -= 1
odd_num += 1
return mylist