Problem
You are given a series of video clips from a sporting event that lasted time
seconds. These video clips can be overlapping with each other and have varying lengths.
Each video clip is described by an array clips
where clips[i] = [starti, endi]
indicates that the ith clip started at starti
and ended at endi
.
We can cut these clips into segments freely.
- For example, a clip
[0, 7]
can be cut into segments[0, 1] + [1, 3] + [3, 7]
.
Return the minimum number of clips needed so that we can cut the clips into segments that cover the entire sporting event [0, time]
. If the task is impossible, return -1
.
Examples
Example 1
|
|
Example 2
|
|
Example 3
|
|
Constraints
1 <= clips.length <= 100
0 <= starti <= endi <= 100
1 <= time <= 100
Solution
Method 1 – Greedy Interval Covering
Intuition
To cover the interval [0, time] with the minimum number of clips, we use a greedy approach: always pick the clip that extends coverage the farthest among those starting before or at the current end. This is similar to the Jump Game II or interval covering problems.
Approach
- Sort clips by their start time.
- Initialize variables for the current end of coverage and the next farthest end.
- Iterate through clips, for each, if its start is within the current coverage, update the farthest end.
- When reaching the end of current coverage, increment the answer and update coverage to the farthest end.
- If at any point the next clip starts after the current coverage, return -1.
- Continue until coverage reaches or exceeds time.
Code
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Complexity
- ⏰ Time complexity:
O(n log n)
, due to sorting and linear scan. - 🧺 Space complexity:
O(1)
, only a constant number of variables are used.