Write a method named Rarest
that accepts a SortedDictionary
from strings to strings as a parameter and returns the value that occurs least frequently in the dictionary.
If there is a tie, return the value that comes earlier in ABC order.
For example, if a variable called dict
containing the following elements:
{{"Alyssa", "Harding"}, {"Char", "Smith"}, {"Dan", "Smith"}, {"Jeff", "Jones"}, {"Kasey", "Jones"},
{"Kim", "Smith"}, {"Morgan", "Jones"}, {"Ryan", "Smith"}, {"Stef", "Harding"}}
Then a call of Rarest(dict)
would return "Harding"
because that value occurs 2 times, fewer than any other.
Note that we are examining the values in the dictionary, not the keys.
If the dictionary passed is empty, throw an ArgumentException
.
Constraints:
Obey the following restrictions in your solution.
- You may create one additional data structure (stack, queue, set, dictionary, etc.) as auxiliary storage. (You can have as many simple variables as you like.)
- You should not modify the contents of the dictionary passed to your method.
Declare your method in such a way that any caller can be sure that this will not happen.
- Your solution should run in no worse than O(N log N) time, where N is the number of pairs in the dictionary.