lst = [1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]
#lst = [1, 2, 1, 4, 1]
#lst = [1, 2, 1, 4]
length = len(lst)
currentValue = lst[0]
lst.pop(0)
currentCount = 1
for val in lst:
if currentCount == 0:
currentValue = val
if val == currentValue:
currentCount += 1
else:
currentCount -= 1
percent = (currentCount * 50.0 / length + 50)
epsilon = 0.1
if (percent - 50 > epsilon):
print "Percent %g%%" % percent
else:
print "No majority"
Примечание: epsilon имеет «случайное» значение, выбрал что-то в зависимости от длины массива и т. Д. Решение Никиты Рыбака с currentCount >= n*0.95
не будет работать, потому что значение currentCount отличается в зависимости от порядкаэлементы, но выше работает .
C:\Temp>a.py
[2, 1, 1, 4, 1]
currentCount = 1
C:\Temp>a.py
[1, 2, 1, 4, 1]
currentCount = 2