435. 无重叠区间

2020-12-31  本文已影响0人  来到了没有知识的荒原

435. 无重叠区间

有意思的题

1.dp

类似LIS,复杂度为O(n^2)

class Solution {
public:
    int eraseOverlapIntervals(vector<vector<int>>& inter) {
        int n=inter.size();
        if(!n)return 0;

        sort(inter.begin(),inter.end(),[](const vector<int>&a,const vector<int>&b){
            if(a[0]!=b[0]) return a[0]<b[0];
            return a[1]<b[1];
        });

        int dp[n];

        for(int i=0;i<n;i++){
            dp[i]=1;
            for(int j=0;j<i;j++){
                if(inter[j][1]<=inter[i][0]){
                    dp[i]=max(dp[i],dp[j]+1);
                }
            }
        }
        int res=0;
        for(int i=0;i<n;i++)res=max(res,dp[i]);
        return n-res;
    }
};

2.贪心

复杂度为sort部分的O(nlogn)
贪心部分复杂度为O(n)

class Solution {
public:
    int eraseOverlapIntervals(vector<vector<int>>& inter) {
        int n=inter.size();
        if(!n)return 0;
        
        sort(inter.begin(),inter.end(),[](const vector<int>&a,const vector<int>&b){
            if(a[1]!=b[1]) return a[1]<b[1];
            return a[0]<b[0];
        });
        int right=inter[0][1];
        int res=1;
        for(int i=1;i<n;i++){
            if(inter[i][0]>=right){
                right=inter[i][1];
                res++;
            }
        }

        return n-res;
    }
};
上一篇 下一篇

猜你喜欢

热点阅读