# HackerRank Coding Question for Placements 5

Ques. 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. 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.
 // 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 = "";         Map.Entry entry;         for (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("Winning Candidate is :" +                                               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);     } }
Output:
John