Java-LeetCode1024. 视频拼接-滑动窗口 | 动态规划

  • 算法
    • 1.按照每组的左区间排序
    • 2.遍历每组区间,找到以当前start开始最多能到达的end,
      • 2.1 当start=end时,片段无法继续往后拼接返回-1
      • 2.2 否则,这样就是一个片段,然后把end赋给start接着遍历下一个窗口
public int videoStitching(int[][] clips, int T) {
    Arrays.sort(clips, (a, b) -> a[0] - b[0]);
    int result = 0;
    for (int start = 0, end = 0, i = 0; start < T; start = end) {
        for (; i < clips.length && clips[i][0] <= start; i++) {
            end = Math.max(end, clips[i][1]);
        }
        if (start == end) {
            return -1;
        }
        result++;
    }
    return result;
}
  • 算法
    • 1.动态规划,dp[i]表示[0-i]至少需要多少个片段剪辑得来
    • 2.初始状态,dp[0] = 0;dp[i] = T + 1,i != 0
    • 3.过渡公式,dp[i] = Math.min(dp[i], dp[clip[0]] + 1) for clip in clips
public int videoStitching(int[][] clips, int T) {
    int[] dp = new int[T+1];
    Arrays.fill(dp, T+1);
    dp[0] = 0;
    for (int i = 1; i <= T && dp[i-1] < T; i++) {
        for (int[] clip : clips) {
            if (clip[0] <= i && i <= clip[1]) {
                dp[i] = Math.min(dp[i], dp[clip[0]]+1);
            }
        }
    }
    return dp[T] == T + 1 ? -1 : dp[T];
}
全部评论

相关推荐

01-30 22:03
门头沟学院 Java
用微笑面对困难:我滴妈,【俩月】【实习】【主管】仨debuff吃满了,独立设计开发的项目写了绝大占比的运营板块,你独立开发,那维护、问题复盘、日志更新、bug、策划书全是自己整的? 不建议写那么大,可以从小出发更容易
点赞 评论 收藏
分享
在喝茶的杨桃很郁闷:我简单喵两句: 1.如果不是实在没东西写不要写熟悉async await这些语法层面的东西 2.也不要写熟悉HTTP,因为http内容很多,稍微深挖一点你不会的话会让人有一种“原来你简历上面的东西都没有完全掌握”的感觉,容易给自己挖坑 3.自我评价可以删了 4.我在复习明天的面试,先mark,后面再回来继续建议
听劝,我这个简历该怎么改...
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务