DEV Community

Discussion on: Write better code: Day 6 - Merge Meetings times

Collapse
 
arjunrajkumar profile image
Arjun Rajkumar • Edited

Inputs - [[0, 1], [3, 5], [4, 8], [10, 12], [9, 10]]
Output - [[0, 1], [3, 8], [9, 12]]

Logic.

  • Sort the meeting times in ascending order.
  • Then compare the starting time with the previous ending meeting time.
  • If it greater, new meeting time. If lesser, check to see which is max.
  • Using sort and going the meetings once so its O[nlogn]
  • Space is O[n]
def meeting_times(meetings)
  meetings = meetings.sort
  answer = [meetings[0]]

  meetings[1..-1].each do |starting_time, ending_time|
    previous_starting_time, previous_ending_time = answer[-1]

    if starting_time > previous_ending_time
      answer << [starting_time, ending_time]
    else
      answer[-1] = [previous_starting_time, [ending_time, previous_ending_time].max]
    end
  end

  answer
end

Nice Ruby hack: If you have an array e.g.
players = ["pele", "jordan", "sachin"]

Then you can assign each of these to 3 different variables with this one line:
football, basketball, cricket = players

so you get 3 variables:
football = pele
basketball = jordan
cricket = sachin

Easier than doing players[0], players[1] and so on..