LeetCode刷题笔记 LCP 08. 剧情触发时间

在这里插入图片描述
在这里插入图片描述

我的二分

class Solution {
public:
    vector<int> getTriggerTime(vector<vector<int>>& increase, vector<vector<int>>& requirements) {
        vector<vector<int>> dp(increase.size(),vector<int>(3));
        vector<int> res;
        dp[0][0]=increase[0][0],dp[0][1]=increase[0][1],dp[0][2]=increase[0][2];
        for(int i=1;i<increase.size();i++)
            for(int j=0;j<3;j++)
                dp[i][j]=dp[i-1][j]+increase[i][j];                    
        for(int i=0;i<requirements.size();i++){
            int ans=-1;
            if(requirements[i][0]==0&&requirements[i][1]==0&&requirements[i][2]==0) ans=0; / 需求为0的特列
            else{
                int left=0,right=increase.size()-1;                
                while(left<right){
                    int mid=(left+right)/2;
                    if(requirements[i][0]>dp[mid][0]||requirements[i][1]>dp[mid][1]||requirements[i][2]>dp[mid][2]) left=mid+1;
                    else right=mid; / 包含等于所以没有-1
                }   
                if(requirements[i][0]<=dp[right][0]&&requirements[i][1]<=dp[right][1]&&requirements[i][2]<=dp[right][2])
                    ans=right+1; / 个数=位置+1
            }
            res.push_back(ans);
        }
        return res;
    }
};

大神的二分

我写了几十分钟,大神写了两分钟(还得包括读题的时间)。

class Solution {
public:
    int s[10005][3];
    vector<int> getTriggerTime(vector<vector<int>>& increase, vector<vector<int>>& requirements) {
        int n=increase.size();
        memset(s,0,sizeof s);
        for(int i=0;i<n;++i)
        {
            for(int j=0;j<3;++j)
                s[i+1][j]=s[i][j]+increase[i][j];
        }
        vector<int> g;
        for(auto u:requirements)
        {
            int l=0,r=n+1; / 看各路大神从-1到n+1,0到n+1的,使用的如此娴熟,为什么我只能想到0到n-1
            while(l<r)
            {
                int m=(l+r)>>1;
                if(s[m][0]>=u[0]&&s[m][1]>=u[1]&&s[m][2]>=u[2])
                    r=m;
                else l=m+1;
            }
            if(r>n) r=-1;
            g.push_back(r);
        }
        return g;
    }
};

猜你喜欢

转载自blog.csdn.net/g534441921/article/details/105605791