题目描述
- 输入一个整数数组,实现一个函数来调整该数组中数字的顺序
- 使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分
- 并保证奇数和奇数,偶数和偶数之间的相对位置不变。
理解
解题思路
思路1
class Solution:
def reOrderArray(self, array):
odd = []
even = []
for i in array:
if i%2==1:
odd.append(i)
else:
even.append(i)
return odd + even
或者简写为
class Solution:
def reOrderArray(self, array):
odd = [i for i in array if i&1]
even = [j for j in array if not j&1]
return odd + even
思路2
- 不考虑奇数和奇数,偶数和偶数之间的相对位置不变这一条件
- 采用两指针分别从首尾出发,当头指针遇到一个偶数,并且尾指针遇到一个奇数时,交换两指针的数字,直到两指针相遇。时间复杂度为O(n),(类似于快排)

class Solution:
def reOrderArray(self, array):
n = len(array)
head = 0
tail = n - 1
while head < tail:
while array[head]%2 != 0:
head += 1
while array[tail]%2 == 0:
tail -= 1
array[head], array[tail] = array[tail], array[head]
head += 1
tail -= 1

博客围绕输入整数数组,调整数字顺序使奇数在前、偶数在后且奇数间、偶数间相对位置不变的问题展开。介绍了合并列表、list与array转换的理解,还给出两种解题思路,一种未考虑相对位置不变,用两指针法,时间复杂度O(n)。
5948





