class Solution:
def MoreThanHalfNum_Solution(self, numbers):
left, right = 0, len(numbers) - 1
index = self.helper(numbers, left, right)
mid = int(len(numbers) / 2)
while index != mid:
if index > mid:
right = index - 1
index = self.helper(numbers, left, right)
elif index < mid:
left = index + 1
index = self.helper(numbers, left + 1, right)
if self.checkMoreThanHalf(numbers, numbers[index]):
return numbers[index]
return 0
def helper(self, numbers,left, right):
base = numbers[left]
while left < right:
while left < right and numbers[right] >= base:
right -= 1
numbers[left] = numbers[right]
while left < right and numbers[left] <= base:
left += 1
numbers[right] = numbers[left]
numbers[left] = base
return left
def checkMoreThanHalf(self, numbers, res):
count = 0
for i in range(len(numbers)):
if numbers[i] == res:
count += 1
if count > int(len(numbers) / 2):
return True
return False