Это динамическое программирование, потому что функция findCandidate разбивает предоставленный массив на более мелкие, более управляемые части. В этом случае он начинает с первого массива в качестве кандидата на большинство. Увеличивая счет, когда он встречается, и уменьшая счет, когда это не так, он определяет, верно ли это. Когда число равно нулю, мы знаем, что первые символы i не имеют большинства. Постоянно вычисляя локальное большинство, нам не нужно перебирать массив более одного раза на этапе идентификации кандидата. Затем мы проверяем, является ли этот кандидат на самом деле большинством, просматривая массив во второй раз, давая нам O (n). На самом деле он выполняется за 2n раза, так как мы повторяем дважды, но константа не имеет значения.