diff --git a/lib/exercises.rb b/lib/exercises.rb index 2cb2bfa..3b61701 100644 --- a/lib/exercises.rb +++ b/lib/exercises.rb @@ -2,19 +2,56 @@ # 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) where n is the size of the strings array +# Space Complexity: O(n) where n is the size of the strings array def grouped_anagrams(strings) - raise NotImplementedError, "Method hasn't been implemented yet!" + return strings if strings.length == 1 || strings.length == 0 + + grouped_words_hash = {} + strings.each do |word| + check_word = word.chars.sort.join + if grouped_words_hash[check_word].nil? + grouped_words_hash[check_word] = [word] + else + grouped_words_hash[check_word].push(word) + end + end + + grouped_words_array = [] + grouped_words_hash.each do |sorted_word, array| + grouped_words_array.push(array) + end + return grouped_words_array 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(nlogn) because of the sort_by algorithm +# Space Complexity: O(n) where n is the size of list def top_k_frequent_elements(list, k) - raise NotImplementedError, "Method hasn't been implemented yet!" + return list if list.length == 0 + + track_common_elements = {} + list.each do |element| + if track_common_elements[element].nil? + track_common_elements[element] = 1 + else + track_common_elements[element] += 1 + end + end + + + common_elements_array = track_common_elements.sort_by {|num, occurence| -occurence} + result = [] + i = 0 + common_elements_array.each do |one_num_array| + if i < k + result.push(one_num_array[0]) + end + i += 1 + end + return result end diff --git a/test/exercises_test.rb b/test/exercises_test.rb index a649110..dd93104 100644 --- a/test/exercises_test.rb +++ b/test/exercises_test.rb @@ -68,7 +68,7 @@ end end - xdescribe "top_k_frequent_elements" do + describe "top_k_frequent_elements" do it "works with example 1" do # Arrange list = [1,1,1,2,2,3]