diff --git a/lib/exercises.rb b/lib/exercises.rb index e1b3850..6909c18 100644 --- a/lib/exercises.rb +++ b/lib/exercises.rb @@ -1,19 +1,45 @@ # 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(m + n + nlog(n)) +# Space Complexity: O(n) def grouped_anagrams(strings) - raise NotImplementedError, "Method hasn't been implemented yet!" + grouped = {} + strings.each do |e| + current_sorted = e.split("").sort.join("") + if !grouped["#{current_sorted}"] + grouped["#{current_sorted}"] = [e] + else + grouped["#{current_sorted}"] << e + end + end + return grouped.values 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!" + if list.length == 0 + return [] + end + nums = {} + list.each do |num| + if !nums[num] + nums[num] = 1 + else + nums[num] += 1 + end + end + + sorted = nums.sort_by {|k, v| -v} + top_k = [] + k.times do |k| + top_k << sorted[k][0] + end + return top_k end @@ -27,3 +53,7 @@ def top_k_frequent_elements(list, k) def valid_sudoku(table) raise NotImplementedError, "Method hasn't been implemented yet!" end + + + + #if col + 1 % 3 == 0 && row + 1 % 3 == 0 -> check square \ No newline at end of file