1024力扣打卡题(动态规划)
解题思路:
1、如果要覆盖所有区间,那么先从视频开始的 0 开始考虑
2、找到所有包含 0 的片段,因为不会有比 0 小开始的片段,所以很好找
3、假如有 [0,1] 和 [0,2] 两个片段,当然会选择 [0,2] 毕竟多了可以剪掉,少了就得多找一个片段了
4、当选择了 [0,2] 为一个肯定要选的片段之后,接下来可以找 [1,x] 和 [2,x] 的片段
5、同理,在所有的 [1,x] 和 [2,x] 片段中挑选覆盖更多的片段
6、重复这个做法,直到影片结束
class Solution {
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; 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] == Integer.MAX_VALUE - 1 ? -1 : dp[T];
}
}