Мне нужно было найти элемент большинства в списке, и я наткнулся на алгоритм Бойера – Мура,
Поэтому я применил его, как рекомендовано, дело в том, что если большинство элементов являются последовательными, он возвращает правильный результат, но если нет, он возвращает неправильный
Это результаты после того, как я запустил тот же массив в другом массиве.
Нужно ли рассматривать какой-либо другой случай для реализации этого алгоритма?
Это похоже на общепринятый алгоритм, и я немного удивлен, получив неверный результат.
Спасибо.
0
3
package main;
public class FindMajority {
public static void main(String[] args) {
int[] array = {3, 2, 3, 1, 0, 3 };
System.out.println( findMajority(array) );
int[] array1 = {3, 3, 3, 2, 0, 1 };
System.out.println( findMajority(array1) );
}
public static int findMajority(int[] arr) {
int m = 0;
int i = 0;
for(int x: arr) {
if(i == 0) {
m = x;
i = 1;
} else if (m == x) {
i = i + 1;
} else {
i = i - 1;
}
}
return m;
}
}