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.
Output:
// 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<String,Integer> map = new HashMap<String, Integer>(); 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<String,Integer> 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); } } |
John
hackerrank questions