Interview Questions
Time periods
Write a function that as input takes two periods of time and returns first period minus the other one.
View Solution
struct TimePeriod
{
int start;
int end;
};
vector<TimePeriod> GetDiff(TimePeriod t, TimePeriod s)
{
vector<TimePeriod> v;
// partially overlapping - left side remains
if (t.start < s.start && t.end <= s.end)
{
v.push_back(TimePeriod(t.start, s.start));
}
// partially overlapping - right side remains
if (s.start <= t.start && s.end < t.end)
{
v.push_back(TimePeriod(s.end, t.end));
}
// TimePeriod s is contained in t
if (t.start < s.start && s.end < t.end)
{
v.push_back(TimePeriod(t.start, s.start));
v.push_back(TimePeriod(s.end, t.end));
}
// non-overlapping ranges & fully overlapping results in empty TimePeriod
return v;
}