diff --git a/lib/exercises.rb b/lib/exercises.rb index e1b3850..af0ab9f 100644 --- a/lib/exercises.rb +++ b/lib/exercises.rb @@ -1,19 +1,53 @@ # This method will return an array of arrays. # Each subarray will have strings which are anagrams of each other -# Time Complexity: ? -# Space Complexity: ? +# Time Complexity: O(n) (n being size of array) +# Space Complexity: O(n) def grouped_anagrams(strings) - raise NotImplementedError, "Method hasn't been implemented yet!" + + grouped_anagrams = Array.new() + hash = Hash.new() + + strings.each do |word| + separated = word.split("").sort! + + if !hash.key?(separated) + hash[separated] = [word] + else + hash[separated] << word + end + end + + hash.each do |key, value| + grouped_anagrams << value + end + + return grouped_anagrams end # This method will return the k most common elements # in the case of a tie it will select the first occuring element. -# Time Complexity: ? -# Space Complexity: ? +# Time Complexity: O(n log n) +# Space Complexity: O(n) def top_k_frequent_elements(list, k) - raise NotImplementedError, "Method hasn't been implemented yet!" + to_me = Array.new + hash = {} + return to_me if k > list.size || list.nil? + + list.each do |value| + if !hash[value] + hash[value] = 1 + else + hash[value] += 1 + end + end + + organized = hash.sort_by {|k, value| -value} + k.times do |i| + to_me << organized[i][0] + end + return to_me end