TheAlgorithms-Python
38 строк · 1.2 Кб
1"""
2This is Booyer-Moore Majority Vote Algorithm. The problem statement goes like this:
3Given an integer array of size n, find all elements that appear more than ⌊ n/k ⌋ times.
4We have to solve in O(n) time and O(1) Space.
5URL : https://en.wikipedia.org/wiki/Boyer%E2%80%93Moore_majority_vote_algorithm
6"""
7
8from collections import Counter9
10
11def majority_vote(votes: list[int], votes_needed_to_win: int) -> list[int]:12"""13>>> majority_vote([1, 2, 2, 3, 1, 3, 2], 3)
14[2]
15>>> majority_vote([1, 2, 2, 3, 1, 3, 2], 2)
16[]
17>>> majority_vote([1, 2, 2, 3, 1, 3, 2], 4)
18[1, 2, 3]
19"""
20majority_candidate_counter: Counter[int] = Counter()21for vote in votes:22majority_candidate_counter[vote] += 123if len(majority_candidate_counter) == votes_needed_to_win:24majority_candidate_counter -= Counter(set(majority_candidate_counter))25majority_candidate_counter = Counter(26vote for vote in votes if vote in majority_candidate_counter27)28return [29vote
30for vote in majority_candidate_counter31if majority_candidate_counter[vote] > len(votes) / votes_needed_to_win32]33
34
35if __name__ == "__main__":36import doctest37
38doctest.testmod()39