Hi , recently came across this problem in a Phone Screen round of a Startup. Can anyone solve it in O(n):
Given log in sessions for various users in a system, write a function totalLoggedinTime(user, querystart, queryend) to find the total logged in time for the given user, ignoring overlaps and gaps:
loginsession:
{
{user: u1, startTime: 100, endTime: 200},
{user: u2, startTime: 200, endTime: 400},
{user: u1, startTime: 300, endTime: 600},
{user: u2, startTime: 400, endTime: 800},
{user: u1, startTime: 500, endTime: 700},
{user: u1, startTime: 800, endTime: 1000},
{user: u3, startTime: 1000, endTime: 1200}
}
example: (u1, 400, 900) outputs 400
explanation:
{user: u1, startTime: 300, endTime: 600}, -> (600-400) -> 200
{user: u1, startTime: 500, endTime: 700}, -> (700 - 600) -> 100 (ignores overlap from last session since last session ended at 600)
{user: u1, startTime: 800, endTime: 1000}, -> (900-800) -> 100
so, total 400 loggedintime for user 1.
You can assume the login sessions are sorted by start time.