剣指offer面接問題21(この配列の数字の順序を調整して奇数を偶数前にする)python

1575 ワード


タイトルの説明
整数配列を入力し、すべての奇数が配列の前半に位置し、すべての偶数が配列の後半に位置し、奇数と奇数、偶数と偶数の間の相対位置が変わらないことを保証する関数を実現します.
 
 
方法1:
運転時間:30 ms
メモリ使用量:5660 k
# -*- coding:utf-8 -*-

class Solution:

    def reOrderArray(self, array):

        # write code here

        #    :    (    ,  ,   )

        a = []

        b = []

        for i in range(len(array)):

            if array[i]%2 == 0:

                b.append(array[i])

            else:

                a.append(array[i])

        return a+b

 
 
方法2:
# -*- coding:utf-8 -*-

class Solution:

    def reOrderArray(self, array):

        # write code here

        #    :       ,       ,       

        i = 0

        j = len(array) - 1

        while i < j:

            while array[i]%2 != 0 and i < j:

                i +=1

            while array[j]%2 == 0 and i < j:

                j -= 1

            array[i] , array[j] = array[j] , array[i]

        return array

 
 
拡張性を加えると、問題が奇数偶数から正負、ゼロまたは非ゼロに変更された場合、形式を書くこともできます.
def reOrderArray( array):
    # write code here
    #    :       ,       ,       
    i = 0
    j = len(array) - 1
    while i < j:
        while even_or_odd(array[i]) and i < j:
            i += 1
        while not even_or_odd(array[j]) and i < j:
            j -= 1
        array[i], array[j] = array[j], array[i]
    return array


def even_or_odd(n):
    if n % 2 == 0:
        return False
    else:
        return True
print(reOrderArray([1,2,3]))