Given an array of strings words and an integer k, return the k most frequent strings.
Return the answer sorted by the frequency from highest to lowest. Sort the words with the same frequency by their lexicographical order.
Input: words = ["i","love","leetcode","i","love","coding"], k = 2
Output: ["i","love"]
Explanation: "i" and "love" are the two most frequent words.
Note that "i" comes before "love" due to a lower alphabetical order.
Input: words = ["the","day","is","sunny","the","the","the","sunny","is","is"], k = 4
Output: ["the","is","sunny","day"]
Explanation: "the", "is", "sunny" and "day" are the four most frequent words, with the number of occurrence being 4, 3, 2 and 1 respectively.
1 <= words.length <= 5001 <= words[i].length <= 10words[i] consists of lowercase English letters.k is in the range [1, The number of unique words[i]]Follow-up: Could you solve it in O(n log(k)) time and O(n) extra space?
The main idea is to count the frequency of each word and then sort them by frequency. Since we need the top k frequent words, we can sort the entries and select the first k elements. As words with identical frequencies should be in alphabetical order, we ensure that in our sort function.
A min-heap can efficiently help maintain the k most frequent elements, especially when we need to sort by frequency primarily. The idea is to always maintain k elements in the heap and eject elements when the heap grows beyond k, ensuring that the heap contains the most frequent words.