Я хочу найти элемент большинства из списка, используя алгоритм «разделяй и властвуй».
Я видел этот код на Leetcode с этим решением:
class Solution:
def majorityElement(self, nums, lo=0, hi=None):
def majority_element_rec(lo, hi):
# base case; the only element in an array of size 1 is the majority
# element.
if lo == hi:
return nums[lo]
# recurse on left and right halves of this slice.
mid = (hi-lo)//2 + lo
left = majority_element_rec(lo, mid)
right = majority_element_rec(mid+1, hi)
# if the two halves agree on the majority element, return it.
if left == right:
return left
# otherwise, count each element and return the "winner".
left_count = sum(1 for i in range(lo, hi+1) if nums[i] == left)
right_count = sum(1 for i in range(lo, hi+1) if nums[i] == right)
return left if left_count > right_count else right
return majority_element_rec(0, len(nums)-1)
когда есть элемент большинства, результат правильный, но когда такого элемента нет, он возвращает неправильный результат.
Я попытался изменить оператор возврата на:
if left_count > right_count:
return left
elif left_count < right_count:
return right
else:
return -1
поэтому он возвращает -1, когда нет правильного ответа. Когда на входе [1,2,1,3]
, результат равен -1 (правильный ответ), но когда на входе [1,2,3,3]
, на выходе 3, что неверно.
Кажется, что все используют это решение, но оно не работает. Любые идеи о том, как это исправить?
ТИА