lc1024-视频拼接

题目描述

  • 给定一些区间和一个数字 time,找到能覆盖 [0, time] 的最少区间数

示例

输入:clips = [[0,2],[4,6],[8,10],[1,9],[1,5],[5,9]], time = 10
输出:3
解释:选 [0,2], [8,10], [1,9]
输入:clips = [[0,1],[1,2]], time = 5
输出:-1
解释:找不到返回 -1
输入:clips = [[0,1],[6,8],[0,2],[5,6],[0,4],[0,3],[6,7],[1,3],[4,7],[1,4],[2,5],[2,6],[3,4],[4,5],[5,7],[6,9]], time = 9
输出:3

题解

  • 思路:贪心 + 区间合并
    • 从 0 开始,若区间包括标记点,更新右端点;若不包括,说明有点无法被覆盖
    • 思路不难,但需要注意临界点
func videoStitching(clips [][]int, time int) int {
    sort.Slice(clips, func(i, j int) bool {
        return clips[i][0] < clips[j][0]
    })

    cnt, ed := 0, 0
    for i := 0; i < len(clips); {
        if ed < clips[i][0] { return -1 }

        r := ed
        for i < len(clips)&& clips[i][0] <= ed {
            r = max(r, clips[i][1])
            i ++
        }
        cnt, ed = cnt + 1, r

        if time <= ed { return cnt }
    }
    return -1
}
posted @ 2025-09-11 21:40  余越  阅读(9)  评论(0)    收藏  举报