Python 3では、 "Majority Element"の分割と征服アルゴリズムの実装に適切な出力が得られません。マジョリティ要素Python
これは比較的正確です。しかし、それはまだ私が何かを欠いているように見えるか、それは少しオフであり、私はそれがなぜあるのか理解できません。
私はいくつかのデバッグステートメントとさまざまなことを試しました。これは、コードの上の注釈に記載されている特定のケースのように見えます。再帰呼び出しを行うときは、 "left_m"は-1、 "right_m"は941795895が解決されます。各インデックスの要素をそれらの変数と比較すると、明らかにカウンタは増分しません。
私はこれについて間違った方法をしていますか?どんな助けでも大歓迎です。
ありがとうございました。
# Input:
# 10
# 2 124554847 2 941795895 2 2 2 2 792755190 756617003
# Your output:
# 0
#
# Correct output:
# 1
def get_majority_element(a, left, right):
if left == right:
return -1
if left + 1 == right:
return a[left]
left_m = get_majority_element(a, left, (left + right - 1)//2)
right_m = get_majority_element(a, (left + right - 1)//2 + 1, right)
left_count = 0
for i in range(0, right):
if a[i] == left_m:
left_count += 1
if left_count > len(a)//2:
return left_m
right_count = 0
for i in range(0, right):
if a[i] == right_m:
right_count += 1
if right_count > len(a)//2:
return right_m
return -1
if __name__ == '__main__':
input = sys.stdin.read()
n, *a = list(map(int, input.split()))
if get_majority_element(a, 0, n) != -1:
print(1)
else:
print(0)
を見つけることにBoyersとムーアのアルゴリズムについては、このリンクで詳細を見つけることができます与えられたサンプル入力の出力は '2'ではなく' '1''ですか? '1'は入力にさえありません! –
私はそれがバイナリになっていると思います。多数の要素がある場合は1を返し、それ以外の場合は0を返します。 – chrisl0lz