毎朝Codewars@2019.08.18(日): Square(n) Sum
毎朝ちびちびCodewars。 [6 kyu] Find The Parity OutlierFind The Parity Outlier www.codewars.com
今日のお題:
"""[6 kyu] Find The Parity OutlierFind The Parity Outlier https://www.codewars.com/kata/find-the-parity-outlier/train/python 要素数3以上の整数からなるリストが与えられる。 リストの要素は、ただ1つを除いて全部偶数か、全部奇数のいずれかである。仲間はずれのその要素を返す関数を書け。 例: [2, 4, 0, 100, 4, 11, 2602, 36] -> 11 (全部偶数で これだけ奇数) [160, 3, 1719, 19, 11, 13, -21] -> 160 (全部奇数で これだけ偶数) """
コード(自分が書いたコード)
def find_outlier(integers): even, odd = [], [] for i in integers: if i % 2 == 0: # even even.append(i) else: # odd odd.append(i) if len(even) > 1 and len(odd) == 1: return odd[0] if len(odd) > 1 and len(even) == 1: return even[0]
全て偶数奇数に仕分けてから最後に1回だけ判定する方法もある(下記、他の人のコード) 一要素仕分ける度に判定する方が、リストが大きい場合の計算量が小さくなるかと思って上記のようにしたが、 後から計算してみたらどちらの方法でも平均計算量は同程度かむしろ遅いぐらいだった。がっくり。
コード(他の人の書いたコード)
def find_outlier(int): odds = [x for x in int if x%2!=0] evens= [x for x in int if x%2==0] return odds[0] if len(odds)<len(evens) else evens[0]