1. 程式人生 > 實用技巧 >leetcode1024. 視訊拼接

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];
    }
};