Алгоритм большинства голосов 뵈예라 - 무라
2515 단어 translatioonalgorithms
베데니에
Решал задачки на LeetCode 와 вот небольшой переводик небольшой статьи про небольшой 알고리즘.
Алгоритм голосования Бойера-Мура является одним из самых популярных и оптимальных алгоритмов, который используется для поиска преобладающего элемента среди заданных, который имеет более N/2 вхождений. Алгоритм выполняет 2 обхода по заданным элементам, что работает при O (N) вреmenнной сложности и O (1) пространственной сложности.
Input :{1,1,1,1,2,3,5}
Output : 1
Input : {1,2,3}
Output : -1
Если какой-то элемент встречается больше N/2 раз то отличных от него элементов меньше N/2. Собственно алгоритм на этом и держится.
Для начала выбирается элемент кандидат. Далее для каждого элемента:
Input :{1,1,1,1,2,3,5}
Output : 1
Input : {1,2,3}
Output : -1
나 슬로바흐
По сути, увеличивая или уменьшая количество голосов мы увеличиваем или уменьшаем приоритет определенного кандидата. Это сработает, поскольку правильный кандидат встретится более N/2 раз. Если количество голосов оказалось 0, это означает, что элементов отличных от кандидата, столько-же, сколько и равных ему. Получается текущий кандидат не может быть большинством и мы выбираем следующего кандидата. окончательный кандидат и будет преобладающим элементом, если такой присутствует. Вторым проходом проверим, что полученный элеmentент встречается больше N/2 раз. Если нет то такого элемента нет.
От слов к коду
public static Integer findMajority(int[] nums)
{
int count = 0;
Integer candidate = null;
for (int num : nums) {
// проверяем, если количество голосов 0 меняем кандидата
if (count == 0) {
candidate = num;
}
// если кандидат и число совпали увеличиваем кол-во голосов
// иначе уменьшаем
count += (num == candidate) ? 1 : -1;
}
count = 0;
// считаем количество элементов равных кандидату
// в исходном массиве
for (int num : nums) {
if (num == candidate)
count++;
}
// если кандидат подходит условию возвращаем его
// иначе возвращаем null;
if (count > (nums.length / 2)) return candidate;
else return null;
}
Reference
이 문제에 관하여(Алгоритм большинства голосов 뵈예라 - 무라), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/avtarasov210/alghoritm-bolshinstva-gholosov-boiiera-mura-29kc
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
public static Integer findMajority(int[] nums)
{
int count = 0;
Integer candidate = null;
for (int num : nums) {
// проверяем, если количество голосов 0 меняем кандидата
if (count == 0) {
candidate = num;
}
// если кандидат и число совпали увеличиваем кол-во голосов
// иначе уменьшаем
count += (num == candidate) ? 1 : -1;
}
count = 0;
// считаем количество элементов равных кандидату
// в исходном массиве
for (int num : nums) {
if (num == candidate)
count++;
}
// если кандидат подходит условию возвращаем его
// иначе возвращаем null;
if (count > (nums.length / 2)) return candidate;
else return null;
}
Reference
이 문제에 관하여(Алгоритм большинства голосов 뵈예라 - 무라), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/avtarasov210/alghoritm-bolshinstva-gholosov-boiiera-mura-29kc텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)