Calculate 7-Day Rolling Average for Energy Consumption
Company: Amazon
Role: Data Scientist
Category: Coding & Algorithms
Difficulty: Medium
Interview Round: Onsite
Quick Answer: This question evaluates programming fluency in numerical data processing and algorithmic implementation for computing moving averages and handling edge cases in time-series sequences, and it applies to Data Scientist roles while falling under the Coding & Algorithms category.
Constraints
- 0 <= len(consumption) <= 200000
- 0 <= consumption[i] <= 1e9
- Output list length equals input list length
- Each average is computed over the last up to 7 elements ending at that index
- Round each average to two decimal places
- Time complexity O(n); extra space O(1) aside from output
Solution
from typing import List
def rolling_average_7(consumption: List[float]) -> List[float]:
"""
Compute the 7-day trailing rolling average for energy consumption.
For index i, average over consumption[max(0, i-6): i+1].
Return each value rounded to two decimals.
"""
result: List[float] = []
window_sum = 0.0
left = 0
for i, val in enumerate(consumption):
window_sum += val
if i - left + 1 > 7:
window_sum -= consumption[left]
left += 1
window_size = i - left + 1
avg = window_sum / window_size
result.append(round(avg, 2))
return result
Explanation
Time complexity: O(n). Space complexity: O(1) extra (O(n) including output).
Hints
- Maintain a running sum of the current window and update it in O(1) per step.
- When the window size exceeds 7, subtract the element that falls out from the left.
- Use round(value, 2) to round each average to two decimal places.