leetcode1024. 视频拼接
我昨晚突然想到这是个背包问题,用stp数组来表示在每一个点能往下跳多远,这样每次就可以直接调用数组而不是在这个vector里查找。第二个循环就是对stp的初始化。接下来对于每一个时间点都去查找前面的时间点能否这样跳到当前的时间节点,如果能的话就修改tim所需片段数。
如此操作时间复杂度是O(n2)
class Solution { public: #define maxxx 10000000 int videoStitching(vector<vector<int>>& clips, int T) { int i,j; int tim[101],stp[101]; for(i=0;i<101;i++){ tim[i]=maxxx; stp[i]=0; } for(i=0;i<clips.size();i++){ stp[clips[i][0]]=max(clips[i][1]-clips[i][0],stp[clips[i][0]]); if(clips[i][0]==0){ for(j=0;j<=clips[i][1];j++){ tim[j]=1; } } } for(i=0;i<101;i++){ for(j=0;j<i;j++){ if(stp[j]+j>=i){ tim[i]=min(tim[j]+1,tim[i]); } } } if(tim[T]==maxxx){ return -1; } return tim[T]; } };