mirror of
https://hub.njuu.cf/TheAlgorithms/Python.git
synced 2023-10-11 13:06:12 +08:00
Added Majority Voting Algorithm (#9866)
* Create MajorityVoteAlgorithm.py * Update and rename MajorityVoteAlgorithm.py to majorityvotealgorithm.py * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Update and rename majorityvotealgorithm.py to majority_vote_algorithm.py * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Update majority_vote_algorithm.py * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Update majority_vote_algorithm.py * Update majority_vote_algorithm.py * Update other/majority_vote_algorithm.py Co-authored-by: Christian Clauss <cclauss@me.com> * renaming variables majority_vote_algorithm.py * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Update majority_vote_algorithm.py * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Update majority_vote_algorithm.py * Update majority_vote_algorithm.py * Update majority_vote_algorithm.py * Update majority_vote_algorithm.py * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Update other/majority_vote_algorithm.py Co-authored-by: Christian Clauss <cclauss@me.com> * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Update other/majority_vote_algorithm.py Co-authored-by: Christian Clauss <cclauss@me.com> * adding more testcases majority_vote_algorithm.py * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Update majority_vote_algorithm.py * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Update majority_vote_algorithm.py --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Christian Clauss <cclauss@me.com>
This commit is contained in:
parent
d0c54acd75
commit
795e97e87f
37
other/majority_vote_algorithm.py
Normal file
37
other/majority_vote_algorithm.py
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
"""
|
||||||
|
This is Booyer-Moore Majority Vote Algorithm. The problem statement goes like this:
|
||||||
|
Given an integer array of size n, find all elements that appear more than ⌊ n/k ⌋ times.
|
||||||
|
We have to solve in O(n) time and O(1) Space.
|
||||||
|
URL : https://en.wikipedia.org/wiki/Boyer%E2%80%93Moore_majority_vote_algorithm
|
||||||
|
"""
|
||||||
|
from collections import Counter
|
||||||
|
|
||||||
|
|
||||||
|
def majority_vote(votes: list[int], votes_needed_to_win: int) -> list[int]:
|
||||||
|
"""
|
||||||
|
>>> majority_vote([1, 2, 2, 3, 1, 3, 2], 3)
|
||||||
|
[2]
|
||||||
|
>>> majority_vote([1, 2, 2, 3, 1, 3, 2], 2)
|
||||||
|
[]
|
||||||
|
>>> majority_vote([1, 2, 2, 3, 1, 3, 2], 4)
|
||||||
|
[1, 2, 3]
|
||||||
|
"""
|
||||||
|
majority_candidate_counter: Counter[int] = Counter()
|
||||||
|
for vote in votes:
|
||||||
|
majority_candidate_counter[vote] += 1
|
||||||
|
if len(majority_candidate_counter) == votes_needed_to_win:
|
||||||
|
majority_candidate_counter -= Counter(set(majority_candidate_counter))
|
||||||
|
majority_candidate_counter = Counter(
|
||||||
|
vote for vote in votes if vote in majority_candidate_counter
|
||||||
|
)
|
||||||
|
return [
|
||||||
|
vote
|
||||||
|
for vote in majority_candidate_counter
|
||||||
|
if majority_candidate_counter[vote] > len(votes) / votes_needed_to_win
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
import doctest
|
||||||
|
|
||||||
|
doctest.testmod()
|
Loading…
Reference in New Issue
Block a user