Temperature tracker

Write a class TempTracker with these methods:

  • insert()—records a new temperature
  • get_max()—returns the highest temp we've seen so far
  • get_min()—returns the lowest temp we've seen so far
  • get_mean()—returns the mean of all temps we've seen so far
  • get_mode()—returns the mode of all temps we've seen so far

Optimize for space and time. Favor speeding up the get_ functions over speeding up the insert() function.

Solution

  • Hint: all the temperatures need not be stored
  • We can calculate min, max on the fly
  • We'll need to store sum and count to calculate mean
  • For mode, we'll have to store occurrences and keep track of the number with max occurrence

Code

# The crux of the the problem is in the insert method, rest of the code is straightforward

def insert(temperature)

    # for mode
    if @temperature_hash[temperature]
      @temperature_hash[temperature] += 1
      if @temperature_hash[temperature] > @max_occurrence
        @max_occurrence = @temperature_hash[temperature]
        @mode = temperature
      end
    else
      @temperature_hash[temperature] = 1
    end

    # for min and max
    @max = temperature if temperature > @max
    @min = temperature if temperature < @min

    # for mean
    @sum += temperature
    @count += 1
    @mean = @sum/@count
  end

Time complexity

  • O(1) for all operations

results matching ""

    No results matching ""