class Solution {
static class Node{
public int beg,end;
public Node(int beg, int end){
this.beg = beg;
this.end = end;
}
}
public int videoStitching(int[][] clips, int T) {
List<Node> arr = new ArrayList<>();
for(int i=0;i<clips.length;i++){
arr.add(new Node(clips[i][0], clips[i][1]));
}
Collections.sort(arr, new Comparator<Node>(){
public int compare(Node a, Node b){
return a.beg - b.beg; //按照开始时间从小到大排序
}
});
int[] dp = new int[T+1]; //到达该时间戳所需要的时间
Arrays.fill(dp, Integer.MAX_VALUE);
dp[0] = 0;
for(Node node:arr){
for(int i=node.beg; i<=node.end && i<=T; i++){
if(i==node.beg && dp[i]==Integer.MAX_VALUE){
return -1; //此时仍不能覆盖此时刻,之后也不会再覆盖了(因为之后的开始时间更晚),直接剪枝,实际上是前一个时间片无法覆盖
}
if(dp[i]==Integer.MAX_VALUE){
dp[i] = dp[node.beg]+1;
continue;
}
dp[i] = Math.min(dp[i], dp[node.beg]+1);
}
}
return dp[T]==Integer.MAX_VALUE?-1 : dp[T];
}
}