给你一份工作时间表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; } };