「每日LeetCode」2020年10月24日-1024快乐
本文最后更新于:2023年3月19日 晚上
Lt1024. 视频拼接,贪心算法
1024. 视频拼接
你将会获得一系列视频片段,这些片段来自于一项持续时长为 T
秒的体育赛事。这些片段可能有所重叠,也可能长度不一。
视频片段 clips[i]
都用区间进行表示:开始于 clips[i][0]
并于 clips[i][1]
结束。我们甚至可以对这些片段自由地再剪辑,例如片段 [0, 7]
可以剪切成 [0, 1] + [1, 3] + [3, 7]
三部分。
我们需要将这些片段进行再剪辑,并将剪辑后的内容拼接成覆盖整个运动过程的片段([0, T]
)。返回所需片段的最小数目,如果无法完成该任务,则返回 -1
。
示例 1:
1 |
|
示例 2:
1 |
|
示例 3:
1 |
|
示例 4:
1 |
|
提示:
1 <= clips.length <= 100
0 <= clips[i][0] <= clips[i][1] <= 100
0 <= T <= 100
思路
注意到对于所有左端点相同的子区间,其右端点越远越有利。
贪心算法,执行以下过程:
- 首先将数组按照区间大小降序排序
- 求是否存在以 0 开始的区间,不存在则返回-1
- 当 max<T,持续进行区间选取,循环具体逻辑:
- 使用一个临时数组等于排序之后的数组。
- 使用 filter 取到左端点在上一个已取区间内,右端点在已取区间外的所有区间。
- 令这些区间的左端点都为上一个已取区间的右端点,这样所有左端点子区间都相同了。
- 按区间大小降序排序,其实就是取右端点最远的那个区间。
- 如果存在这样的区间,则取该区间,将最左最右端点设为区间的端点。
- 如果不存在则返回-1。
- 返回 count 结果
解答
1 |
|
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!