劍指offer_第13題_調整陣列順序使奇數位於偶數前面
阿新 • • 發佈:2019-01-24
題目描述
- 輸入一個整數陣列,實現一個函式來調整該陣列中數字的順序
- 使得所有的奇數位於陣列的前半部分,所有的偶數位於陣列的後半部分
- 並保證奇數和奇數,偶數和偶數之間的相對位置不變。
理解
解題思路
思路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