LeetCode: 1024. 视频拼接

挺有意思的文字类答题游戏: 1024 程序员的奇幻冒险

1024 节日 >> 我应该自己先磨出这道题 >> 再去看解法

  1. 贪心

  2. 【×】动态规划【×】 >> 自己想了一段时间 >> dp[][] >> 表示加上该区间后的 最小数目
    2.1 状态转移方程 >> dp[i][j] = dp[i - 1][j] == 0 && dp[i][j] == 1 ? dp[i][T + 1] = d[i - 1][T + 1] + 1 >> 错了

  3. 动态规划
    3.1 dp[i] 为覆盖 [0, i) 区间所需要的最少区间数量。
    3.2 状态转移方程:

思路

遍历所有的区间 0 - T ,因为 dp[i] 表示的是 [0, i) 范围所需要的最少数量,当我们遍历到 第 i + 1 的数时,表示我们要找 [0, i + 1) 的区间, 而 [0, i) 前面已经有相应的 dp[clips[0]] 了,所有我们找到满足 [i, i + 1] 的条件来更新状态 >> 状态转移, 在前面已有条件(dp[clips[i][0]])上 + 1 即可, 然后在与本身相比较 >> 取 min 的

贪心

这种写法也就当练练自定义排序吧。

假贪心 >> 面向调试编程 >> 还能优化

public int videoStitching(int[][] clips, int T) {int row = clips.length;int col = clips[0].length;// 自定义排序Arrays.sort(clips, new Comparator<int[]>() {@Overridepublic int compare(int[] o1, int[] o2) {if(o1[0] == o2[0]){return o1[1] - o2[1];}return o1[0] - o2[0];}});if(clips[0][0] != 0) return -1;int start = clips[0][0];int end = clips[0][1];int ans = 0;for (int i = 1; i < row; i++) {if(i != 1) i--;// 找到区间最大的while (i < row && start == clips[i][0]){if(end < clips[i][1]) end = clips[i][1];i++;}ans++;int mxend = 0;int index = 0;// 找到与前一个 end 相交且相邻最近的 end 最大的while (i < row && end >= clips[i][0]){if(clips[i][1] - end > mxend) {mxend = clips[i][1] - end;index = i;}i++;}if(end >= T) return ans;if(mxend == 0 || i >= row && (end + mxend) < T) return -1;if((end + mxend )>= T) return ans + 1;// 更新 开始、结束区间下标start = clips[index][0];end = clips[index][1];}return -1;}

结束条件那里卡了多次数据 >> 分析不到位…

            if(end >= T) return ans;if(mxend == 0 || i >= row && (end + mxend) < T) return -1;if((end + mxend )>= T) return ans + 1;

编程题没有这种数据错误的信息 >> 就凉了…

dp

DP思路在上面

public int videoStitching(int[][] clips, int T) {int[] dp = new int[T + 1];Arrays.fill(dp, Integer.MAX_VALUE - 1);dp[0] = 0;for (int i = 1; i < T + 1; i++) {for (int j = 0; j < clips.length; j++) {if(clips[j][0] < i && i <= clips[j][1]){dp[i] = Math.min(dp[i], dp[clips[j][0]] + 1);}}}// for (int i = 0; i < T + 1; i++) {//     System.out.print(dp[i] + "  ");// }return dp[T] == Integer.MAX_VALUE - 1? -1 : dp[T];}

Arrays.fill(dp, Integer.MAX_VALUE - 1); 的原因

贪心

思路: 最终的答案的 左端点不可能出现相同的,所以在相同的左端点 i , 其有端点越远越好。为左端点记录其最远的右端点

public int videoStitching(int[][] clips, int T) {// 记录当前i能被覆盖到的最远的右端点int[] maxr = new int[T];int right = 0, pre = 0, ans = 0;// 记录最远的右端点for (int i = 0; i < clips.length; i++) {if(clips[i][0] < T){maxr[clips[i][0]] = Math.max(maxr[clips[i][0]], clips[i][1]);}}// 选区间for (int i = 0; i < T; i++) {// 当前 i 最右端点right = Math.max(maxr[i], right);if(i == right) return -1;// 这里是根据上一次 right 的位置, 遍历到了才算 +1 个区间if(i == pre){ans++;// 更新下次 i 需要便利到 right 才算 +1 区间pre = right;}}return ans;}


>> 解题思路

1024. 视频拼接 (dp / 贪心)相关推荐

  1. 1024.视频拼接-中等-贪心算法

    你将会获得一系列视频片段,这些片段来自于一项持续时长为T秒的体育赛事.这些片段可能有所重叠,也可能长度不一. 视频片段clips[i]都用区间进行表示:开始于clips[i][0]并于 clips[i ...

  2. 1024. 视频拼接 的两种解法

    1024. 视频拼接 1,动态规划 2,贪心 待续   你将会获得一系列视频片段,这些片段来自于一项持续时长为 T 秒的体育赛事.这些片段可能有所重叠,也可能长度不一.   视频片段 clips[i] ...

  3. [LeetCode]1024. 视频拼接

    1024. 视频拼接 题目地址:https://leetcode-cn.com/problems/video-stitching/ 动态规划 // 动态规划方法 // dp[index] 为到位置 i ...

  4. leetcode - 1024. 视频拼接

    1024. 视频拼接 -------------------------------------------- 你将会获得一系列视频片段,这些片段来自于一项持续时长为 T 秒的体育赛事.这些片段可能有 ...

  5. 力扣1024视频拼接

    1.1024. 视频拼接 来源力扣解析:1024力扣题解 难度中等261 你将会获得一系列视频片段,这些片段来自于一项持续时长为 time 秒的体育赛事.这些片段可能有所重叠,也可能长度不一. 使用数 ...

  6. Leetcode 1024 - 视频拼接

    题目 Leetcode题目 - 1024. 视频拼接 你将会获得一系列视频片段,这些片段来自于一项持续时长为 T 秒的体育赛事.这些片段可能有所重叠,也可能长度不一. 视频片段 clips[i] 都用 ...

  7. Leetcode.1024 视频拼接

    题目链接 Leetcode.1024 视频拼接 Rating : 1746 题目描述 你将会获得一系列视频片段,这些片段来自于一项持续时长为 time秒的体育赛事.这些片段可能有所重叠,也可能长度不一 ...

  8. 1024. 视频拼接(动态规划)

    /*** 1024. 视频拼接* @author wsq* @date 2020/10/24你将会获得一系列视频片段,这些片段来自于一项持续时长为 T 秒的体育赛事.这些片段可能有所重叠,也可能长度不 ...

  9. leetcode 1024.视频拼接

    leetcode 1024.视频拼接 题干 你将会获得一系列视频片段,这些片段来自于一项持续时长为 T 秒的体育赛事.这些片段可能有所重叠,也可能长度不一. 视频片段 clips[i] 都用区间进行表 ...

最新文章

  1. 来阿里前 vs 来阿里后
  2. 【CSS】选择器优先级
  3. application time for the banking industry
  4. 发布!天池布匹疵点检测大赛解决方案与Baseline(acc:85%左右,mAP:52%左右)
  5. EJB3.0零碎要点---在部署web本地客户端的时候org.apache.jasper.JasperException: java.lang.ClassCastException: $Proxy
  6. 基于Keil 5编写汇编程序
  7. C#实现图片转字符画
  8. 简析FUP LB5CM/LB6CM 落地式低速大容量冷冻离心机
  9. php跟安卓交互,android客户端跟php服务简单交互
  10. Python之数据容器
  11. 长期有耐心读后感-20221010
  12. QQ商家(QQ在线咨询,QQ推广等)
  13. 【小说】玻璃碎片-第三章
  14. 果粉沸腾,iPhone6领衔苹果最顶级明星阵容
  15. AILearning:GitHub万星的中文机器学习资源,路线图、视频、电子书、学习建议全在这
  16. CentOS无人值守安装
  17. 探讨服务端自定义生成PDF的几种方案
  18. 用Python实现无条件重复循环
  19. 2015程序员小白理财记
  20. php面试理论之精选

热门文章

  1. 笃行致远 不负芳华!新荣耀终端公司招聘AI算法专家和工程师
  2. 0-10V转PWM脉宽调制视觉光源4-20mA/RS485比例阀电磁阀驱动控制器
  3. word内公式增加、删除、对齐
  4. Apache Iceberg理解和应用
  5. Loj 6036 「雅礼集训 2017 Day4」编码 - 2-sat
  6. Iceberg源码学习:flink读iceberg流程一
  7. matlab打开模型,老版本Matlab模型打开方式
  8. 北京交通大学计算机系英语,北京交通大学计算机专业排名,英语专业
  9. Win7安装VS2015时报错,Sqldom.msi文件丢失或损坏的解决方法
  10. 问题记录--25端口邮件发送失败