Write a method rarestAge
that accepts as a parameter a map from students' names (strings) to their ages (integers), and returns the least frequently occurring age. Consider a map variable m
containing the following key/value pairs:
{Alyssa=22, Char=25, Dan=25, Jeff=20, Kasey=20, Kim=20, Mogran=25, Ryan=25, Stef=22}
Three people are age 20 (Jeff, Kasey, and Kim), two people are age 22 (Alyssa and Stef), and four people are age 25 (Char, Dan, Mogran, and Ryan). So a call of
rarestAge(m)
returns
22
because only two people are that age.
If there is a tie (two or more rarest ages that occur the same number of times), return the youngest age among them. For example, if we added another pair of Kelly=22
to the map above, there would now be a tie of three people of age 20 (Jeff, Kasey, Kim) and three people of age 22 (Alyssa, Kelly, Stef). So a call of rarestAge(m)
would now return 20
because 20 is the smaller of the rarest values.
If the map passed to your method is null
or empty, your method should throw an IllegalArgumentException
. You may assume that no key or value stored in the map is null
. Otherwise you should not make any assumptions about the number of key/value pairs in the map or the range of possible ages that could be in the map.
You may create one collection of your choice as auxiliary storage to solve this problem. You can have as many simple variables as you like. You should not modify the contents of the map passed to your method. For full credit your code must run in less than O(n2) time where n is the number of pairs in the map.