声明:只求用最简单的方法通过,不求优化,不喜勿喷
- 用dp来做,dp数组来表示达到某一位需要的最小片数,初始化为0
- 先把数组按照开始坐标排序
- 之后遍历整个数组,每次将数组的当前项的范围赋值,
- 如果当前范围第一位为-1,则不能达到这位,所以返回-1
- 如果可以到达,那么当前范围可到的dp数组值更新,当前为-1的值变为当前范围第一位+1
- 特殊情况的第一位,如果第一个的开始不是0,那么返回-1,否则这个范围的dp变为1,如果其他范围开头也是0,范围赋值dp为1
- 最后输出dp[最后一位]即可
- 优化todo
/**
* @param {number[][]} clips
* @param {number} time
* @return {number}
*/
var videoStitching = function (clips, time) {
clips.sort((a, b) => {
return a[0] - b[0];
})
let dp = new Array(time + 1).fill(-1);
let step = 0;
for (var i = 0; i < clips.length; i++) {
if (clips[i][0] == 0) {
step = 1
}
else if (dp[clips[i][0]] == -1) {
return -1;
} else {
step = dp[clips[i][0]] + 1
}
for (var j = clips[i][0]; j <= clips[i][1]; j++) {
if (dp[j] == -1) {
dp[j] = step;
} else {
dp[j] = dp[j] < step ? dp[j] : step;
}
}
}
return dp[time]
};