From bdac92c24b7100291479e8ab62c2e5b0b4a8d1e9 Mon Sep 17 00:00:00 2001 From: Kalkidan Ashenafi Date: Wed, 30 Jun 2021 18:19:09 -0700 Subject: [PATCH 1/2] 1 & 2 passing --- lib/exercises.rb | 39 ++++++++++++++++++++++++++++++++++++--- 1 file changed, 36 insertions(+), 3 deletions(-) diff --git a/lib/exercises.rb b/lib/exercises.rb index e1b3850..ebbbbfb 100644 --- a/lib/exercises.rb +++ b/lib/exercises.rb @@ -1,11 +1,23 @@ - # This method will return an array of arrays. # Each subarray will have strings which are anagrams of each other # Time Complexity: ? # Space Complexity: ? def grouped_anagrams(strings) - raise NotImplementedError, "Method hasn't been implemented yet!" + return [] if strings.empty? + + groups = {} + strings.each do |string| + sorted = string.chars.sort + + if groups[sorted] + groups[sorted] << string + else + groups[sorted] = [string] + end + end + + return groups.values end # This method will return the k most common elements @@ -13,7 +25,28 @@ def grouped_anagrams(strings) # Time Complexity: ? # Space Complexity: ? def top_k_frequent_elements(list, k) - raise NotImplementedError, "Method hasn't been implemented yet!" + + frequency_hash = {} + list.each do |n| + if frequency_hash[n] + frequency_hash[n] += 1 + else + frequency_hash[n] = 1 + end + end + + answer = [] + k.times do + highest_freq = 0 + frequency_hash.each_value do |value| + highest_freq = value if value > highest_freq + end + most_frequent_ele = frequency_hash.key(highest_freq) + answer << most_frequent_ele if most_frequent_ele + frequency_hash.delete(most_frequent_ele) + end + + return answer end From ef3f2caf9e35ca3970ef675d1aebaa0ddc2ecc43 Mon Sep 17 00:00:00 2001 From: Kalkidan Ashenafi Date: Wed, 30 Jun 2021 18:27:33 -0700 Subject: [PATCH 2/2] Added s & t complexity --- lib/exercises.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/exercises.rb b/lib/exercises.rb index ebbbbfb..22d22e2 100644 --- a/lib/exercises.rb +++ b/lib/exercises.rb @@ -1,7 +1,7 @@ # 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 log n) +# Space Complexity: O(n) def grouped_anagrams(strings) return [] if strings.empty?