# Find winner of an election where votes are represented as candidate names

Given an array of names of candidates in an election. A candidate name in array represents a vote casted to the candidate. Print the name of candidates received Max vote. If there is tie, print lexicographically smaller name.

Examples:

```Input :  votes[] = {"john", "johnny", "jackie",
"johnny", "john", "jackie",
"jamie", "jamie", "john",
"johnny", "jamie", "johnny",
"john"};
Output : John
We have four Candidates with name as 'John',
'Johnny', 'jamie', 'jackie'. The candidates
John and Johny get maximum votes. Since John
is alphabetically smaller, we print it.
```

## Recommended: Please solve it on PRACTICE first, before moving on to the solution.

A simple solution is to run two loops and count occurrences of every word. Time complexity of this solution is O(n * n * MAX_WORD_LEN).

An efficient solution is to use Hashing. We insert all votes in a hash map and keep track of counts of different names. Finally we traverse the map and print the person with maximum votes.

## CPP

 `// C++++ program to find winner in an election. ` `#include "bits/stdc++.h" ` `using` `namespace` `std; ` ` `  `    ``/* We have four Candidates with name as 'John', ` `      ``'Johnny', 'jamie', 'jackie'. ` `       ``The votes in String array are as per the ` `       ``votes casted. Print the name of candidates ` `       ``received Max vote. */` `    ``void` `findWinner(vector& votes) ` `    ``{ ` `         `  `        ``// Insert all votes in a hashmap ` `        ``map mapObj ; ` `        ``for` `(``auto``& str : votes) ` `        ``{ ` `            ``mapObj[str]++; ` `        ``} ` `  `  `        ``// Traverse through map to find the candidate ` `        ``// with maximum votes. ` `        ``int` `maxValueInMap = 0; ` `        ``string winner; ` `        ``for` `(``auto``& entry : mapObj) ` `        ``{ ` `            ``string key  = entry.first; ` `            ``int` `val = entry.second; ` `            ``if` `(val > maxValueInMap) ` `            ``{ ` `                ``maxValueInMap = val; ` `                ``winner = key; ` `            ``} ` `  `  `            ``// If there is a tie, pick lexicographically ` `            ``// smaller. ` `            ``else` `if` `(val == maxValueInMap && ` `                ``winner>key) ` `                ``winner = key; ` `        ``} ` `        ``cout << winner << endl; ` `    ``} ` `  `  `    ``// Driver code ` `    ``int` `main() ` `    ``{ ` `       ``vector votes = { ``"john"``, ``"johnny"``, ``"jackie"``, ` `                         ``"johnny"``, ``"john"``, ``"jackie"``, ` `                         ``"jamie"``, ``"jamie"``, ``"john"``, ` `                         ``"johnny"``, ``"jamie"``, ``"johnny"``, ` `                         ``"john"` `}; ` `  `  `       ``findWinner(votes); ` `       ``return` `0; ` `    ``} ` `    `

## Java

 `// Java program to find winner in an election. ` `import` `java.util.*; ` ` `  `public` `class` `ElectoralVotingBallot ` `{ ` `    ``/* We have four Candidates with name as 'John', ` `      ``'Johnny', 'jamie', 'jackie'. ` `       ``The votes in String array are as per the ` `       ``votes casted. Print the name of candidates ` `       ``received Max vote. */` `    ``public` `static` `void` `findWinner(String votes[]) ` `    ``{ ` `        ``// Insert all votes in a hashmap ` `        ``Map map = ` `                    ``new` `HashMap(); ` `        ``for` `(String str : votes) ` `        ``{ ` `            ``if` `(map.keySet().contains(str)) ` `                ``map.put(str, map.get(str) + ``1``); ` `            ``else` `                ``map.put(str, ``1``); ` `        ``} ` ` `  `        ``// Traverse through map to find the candidate ` `        ``// with maximum votes. ` `        ``int` `maxValueInMap = ``0``; ` `        ``String winner = ``""``; ` `        ``for` `(Map.Entry entry : map.entrySet()) ` `        ``{ ` `            ``String key  = entry.getKey(); ` `            ``Integer val = entry.getValue(); ` `            ``if` `(val > maxValueInMap) ` `            ``{ ` `                ``maxValueInMap = val; ` `                ``winner = key; ` `            ``} ` ` `  `            ``// If there is a tie, pick lexicographically ` `            ``// smaller.  ` `            ``else` `if` `(val == maxValueInMap && ` `                ``winner.compareTo(key) > ``0``) ` `                ``winner = key; ` `        ``} ` `        ``System.out.println(winner); ` `    ``} ` ` `  `    ``// Driver code ` `    ``public` `static` `void` `main(String[] args) ` `    ``{ ` `       ``String[] votes = { ``"john"``, ``"johnny"``, ``"jackie"``, ` `                         ``"johnny"``, ``"john"``, ``"jackie"``, ` `                         ``"jamie"``, ``"jamie"``, ``"john"``, ` `                         ``"johnny"``, ``"jamie"``, ``"johnny"``, ` `                         ``"john"` `}; ` ` `  `       ``findWinner(votes); ` `    ``} ` `} `

## C#

 `// C# program to find winner in an election. ` `using` `System; ` `using` `System.Collections.Generic; ` ` `  `public` `class` `ElectoralVotingBallot ` `{ ` `    ``/* We have four Candidates with name as 'John', ` `    ``'Johnny', 'jamie', 'jackie'. ` `    ``The votes in String array are as per the ` `    ``votes casted. Print the name of candidates ` `    ``received Max vote. */` `    ``public` `static` `void` `findWinner(String []votes) ` `    ``{ ` `        ``// Insert all votes in a hashmap ` `        ``Dictionary map = ` `                    ``new` `Dictionary(); ` `        ``foreach` `(String str ``in` `votes) ` `        ``{ ` `            ``if` `(map.ContainsKey(str)) ` `                ``map[str] = map[str] + 1; ` `            ``else` `                ``map.Add(str, 1); ` `        ``} ` ` `  `        ``// Traverse through map to find the candidate ` `        ``// with maximum votes. ` `        ``int` `maxValueInMap = 0; ` `        ``String winner = ``""``; ` `        ``foreach``(KeyValuePair entry ``in` `map) ` `        ``{ ` `            ``String key = entry.Key; ` `            ``int` `val = entry.Value; ` `            ``if` `(val > maxValueInMap) ` `            ``{ ` `                ``maxValueInMap = val; ` `                ``winner = key; ` `            ``} ` ` `  `            ``// If there is a tie, pick lexicographically ` `            ``// smaller.  ` `            ``else` `if` `(val == maxValueInMap && ` `                ``winner.CompareTo(key) > 0) ` `                ``winner = key; ` `        ``} ` `        ``Console.WriteLine(winner); ` `    ``} ` ` `  `    ``// Driver code ` `    ``public` `static` `void` `Main(String[] args) ` `    ``{ ` `        ``String[] votes = { ``"john"``, ``"johnny"``, ``"jackie"``, ` `                            ``"johnny"``, ``"john"``, ``"jackie"``, ` `                            ``"jamie"``, ``"jamie"``, ``"john"``, ` `                            ``"johnny"``, ``"jamie"``, ``"johnny"``, ` `                            ``"john"` `}; ` `     `  `        ``findWinner(votes); ` `    ``} ` `} ` ` `  `// This code is contributed by PrinciRaj1992 `

Output:

```John
```

Another efficient solution is to use Trie. Please refer most frequent word in an array of strings.

This article is contributed by Ishfaq Ramzan Nagoo. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.

My Personal Notes arrow_drop_up

Article Tags :

10

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.