Google Phone Interview Question - L3

Question: Given a list of ranges and you have to return a random number that is present within one of the ranges.
Constraint: Use constant space and linear time

Input: [[5, 10], [17, 19], [21, 32]]
Output: Any number between the ranges that is given(inclusive) e.g 6 or 5, 18, 31

Solution:

import random

def getRandom(ranges):
  ans = 0
  total_nums = 0

  for range in ranges:
    total_nums += range[1] - range[0] + 1
  random_num = random.randint(0, total_nums - 1)

  for range in ranges:
    current_range = range[1] - range[0] + 1
    if(random_num < current_range):
      ans = range[0] + random_num;
      break
    else:
      random_num -= current_range
  return ans
Comments (1)