Leetcode 1124 表现良好的最长时间段

给你一份工作时间表hours,上面记录着某一位员工每天的工作小时数。我们认为当员工一天中的工作小时数大于8小时的时候,那么这一天就是「劳累的一天」。所谓「表现良好的时间段」,意味在这段时间内,「劳累的天数」是严格 大于「不劳累的天数」。请你返回「表现良好时间段」的最大长度。

class Solution {
public:
    int longestWPI(vector<int>& hours) {
        vector<int> pre(hours.size()+1, 0);
        for(int i = 0; i < hours.size(); ++i) {
            if(hours[i] > 8)
                hours[i] = 1;
            else
                hours[i] = -1;
            pre[i + 1] = pre[i] + hours[i];
        }
        stack<pair<int, int>> low;
        for(int i = 0; i < pre.size(); i++){
            if(low.empty() || pre[i] < (low.top()).first){
                low.push({pre[i], i});
            }
        }
        int ans = 0;
        int i = pre.size()-1;
        while(i > ans) {
            while (!low.empty() && pre[i] > (low.top().first)){
                ans = max(i-(low.top()).second, ans);
                low.pop();
            }
            i--;
        }
        return ans;
    }
};

猜你喜欢

转载自www.cnblogs.com/rainbow-blue-sky/p/12529914.html