跳转至

LCP 08.剧情触发时间 (Medium)*

题目描述*

思路 & 代码*

比赛的时候一直 TLE,没想出来实属脑瘫。

累加之后二分查找获取左边界就行了,TLE 就是因为一直线性查找。。。

class Solution {
public:
    vector<int> getTriggerTime(vector<vector<int>>& increase, vector<vector<int>>& requirements) {
        int n = increase.size();
        int len = requirements.size();
        vector<vector<int>> base(n + 1, vector<int>(3, 0));
        base[1] = increase[0];
        for(int i = 2; i <= n; i++) {
            base[i][0] = base[i - 1][0] + increase[i - 1][0];
            base[i][1] = base[i - 1][1] + increase[i - 1][1];
            base[i][2] = base[i - 1][2] + increase[i - 1][2];
        }
        vector<int> res(len, -1);
        for(int i = 0; i < len; i++) {
            auto& req = requirements[i];
            int l = 0, r = n + 1;
            int mid = l + (r - l) / 2;
            while(l < r) {
                mid = l + (r - l) / 2;
                if(base[mid][0] >= req[0] && base[mid][1] >= req[1] && base[mid][2] >= req[2]) {
                    r = mid;
                }else {
                    l = mid + 1;
                }
            }
            if(l == n + 1) {
                res[i] = -1;
            }else {
                res[i] = l;
            }
        }
        return res;
    }
};

最后更新: July 23, 2022