问题描述
给你一份工作时间表 hours,上面记录着某一位员工每天的工作小时数。
我们认为当员工一天中的工作小时数大于 8 小时的时候,那么这一天就是「劳累的一天」。
所谓「表现良好的时间段」,意味在这段时间内,「劳累的天数」是严格 大于「不劳累的天数」。
请你返回「表现良好时间段」的最大长度。
示例 1:
输入:hours = [9,9,6,0,6,6,9] 输出:3 解释:最长的表现良好时间段是 [9,9,6]。
提示:
1 <= hours.length <= 10000 0 <= hours[i] <= 16
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-well-performing-interval
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
参考源码
class Solution {
public:
int longestWPI(vector<int>& hours) {
int len=hours.size();
int *a=new int[len+1];
int max=0,index=-1;
vector<int> vec;
a[0]=0;
vec.push_back(0);
for(int i=0;i<len;i++){
if(hours[i]>8){
a[i+1]=a[i]+1;
}
else{
a[i+1]=a[i]-1;
}
if(a[i+1]<a[vec.back()])
vec.push_back(i+1);
}
for(int i=len;i>0&&!vec.empty();i--){
if(i==vec.back()){
vec.pop_back();
}
while(!vec.empty()&&a[i]-a[vec.back()]>0){
index=vec.back();
vec.pop_back();
}
if(i-index>max&&index!=-1)
max=i-index;
}
return max;
}
};