У меня возникли проблемы с получением правильного вывода на мой разрыв «большинство элементов» и властвуй реализацию алгоритма в Python 3.Большинство элементов Python
Это должно быть относительно правильным; однако, по-прежнему кажется, что я что-то пропущу, или он слегка выключен, и я не могу понять, почему это так.
Я пробовал некоторое отладочное заявление и разные вещи. Похоже, что в конкретном случае, указанном в комментарии выше кода, он разрешает -1 для «left_m» и 941795895 для «right_m», когда он выполняет рекурсивные вызовы. Когда он сравнивает элемент по каждому индексу с этими переменными, счетчик, очевидно, никогда не будет увеличиваться.
Я иду об этом неправильно? Любая помощь будет принята с благодарностью.
Спасибо.
# 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)
Почему бы правильно выход для данного ввода образца будет '1', а не' 2'? '1' даже не на входе! –
Я предполагаю, что он должен быть двоичным, например, если есть элемент возврата большинства 1, иначе возвратите 0. – chrisl0lz