1. 程式人生 > >劍指offer_第13題_調整陣列順序使奇數位於偶數前面

劍指offer_第13題_調整陣列順序使奇數位於偶數前面

題目描述

  • 輸入一個整數陣列,實現一個函式來調整該陣列中數字的順序
  • 使得所有的奇數位於陣列的前半部分,所有的偶數位於陣列的後半部分
  • 並保證奇數和奇數,偶數和偶數之間的相對位置不變。

理解

解題思路

思路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