Если я правильно понял, вам нужна группировка. Вот моё решение на Haskell (я новичок, так что не исключено, что есть лучшие варианты). По крайней мере (комментарии) алгоритм ясен.
import Data.List
a = [1, 2, 4, 4, 2, 2, 1, 4]
-- группируем
b = group a -- [[1],[2],[4,4],[2,2],[1],[4]]
-- фильтруем список b, содержащие максимум списка a
c = let f (x:_) = x == maximum a in filter f b -- [[4,4],[4]]
-- минимальная длина группы
minimum . map length $ c -- 1
Вот цепочка в одну строку:
minimum . map length . filter ((== maximum a) . head ) . group $ a