面試題21:調整數組順序使奇數位於偶數前面

題目:輸入一個整數數組,實現一個函數來調整該數組中數字的順序,使得所有奇數位於數組的前半部分,所有偶數位於數組的後半部分。

解題思路:使用兩個指針,第一個指針初始化指向數組的第一個數字,從前向後移動,遇到偶數就停下來;第二個指針指向數組的最後一個數字,從後向前移動,遇到奇數就停下來,交換兩個指針指向的元素,直到兩個指針相遇。

class Solution:
    def ReorderOddEven(self, data):
        L = len(data)
        if data is None or L<=0:
            return False
        pBegin = 0
        pEnd = L-1
        while pBegin<pEnd:
            # 向後移動pBegin,直到它指向偶數
            while pBegin<pEnd and data[pBegin]%2!=0:
                pBegin += 1
            # 向前移動pEnd,直到它指向奇數
            while pBegin<pEnd and data[pEnd]%2==0:
                pEnd -= 1
            if pBegin<pEnd:
                data[pBegin], data[pEnd] = data[pEnd], data[pBegin]
        print(data)
        return data

if __name__=="__main__":
    data = [1,2,3,4,5,6,7,8]
    solution = Solution()
    solution.ReorderOddEven(data)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章