一个理解错的题

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

给你一份工作时间表 hours,上面记录着某一位员工每天的工作小时数。

我们认为当员工一天中的工作小时数大于 8 小时的时候,那么这一天就是「劳累的一天」。

所谓「表现良好的时间段」,意味在这段时间内,「劳累的天数」是严格 大于「不劳累的天数」。

请你返回「表现良好时间段」的最大长度。

class Solution {
public:
    int longestWPI(vector<int>& hours) {
        int remain = 0;  // 标记连续工作n天多余的工作小时数
        int start = 0;   // 从第零天起
        int maxDay = 0;   // 最大的工作天数
        int allHours = 0; // 连续n天总的工作小时数
        int res = 0;
        while(start<hours.size())
        {
            // 寻找第一个大于8小时的那一天
            if(hours[start]>=8){
                break;
            }
            start++;
        }
        if(start == hours.size()){
            // 如果没有找打大于8的那一天,则这是个废物员工
            cout<<"res"<<endl;
            return 0;
        }
        int end = start;
        maxDay =1;
        res = maxDay;
        allHours = hours[start];
        remain = allHours - maxDay*8;
        while(end<hours.size())   // 寻找连续天数
        {
            if(maxDay>res)
            {
                res = maxDay;
            }
            if(start == end+1)
            {
                while(start<hours.size())
               {
                // 寻找第一个大于8小时的那一天
                  if(hours[start]>8){
                       int end = start;
                        maxDay =1;
                        allHours = hours[start];
                        remain = allHours- maxDay*8;
                        break;
                   }
                start++;
                }
            }
            
            end++;
            if(hours[end]>=8){
                maxDay+=1;
                allHours+=hours[end];
                remain = allHours-maxDay*8;
            }
            else
            {
               // 这一天小于8小时,那么看前面的时间是否有剩余分配过来
               if(remain+hours[end]>=8)
               {
                   cout<<3<<endl;
                   // 有剩余,可继续保持
                   maxDay+=1;
                   allHours+=hours[end];
                   remain = allHours-maxDay*8;
               }
               else
               {
                   // 没有剩余,说明在这一天断了,查看从起始天数开始,有没有托节奏的一天
                   while(start<end)
                   {
                       if((allHours/maxDay)>hours[start])
                       {
                           // 如果第一天托节奏了,那么就去除第一天的
                           maxDay--;
                           allHours-=hours[start];
                           remain = allHours-maxDay*8;
                           start++;
                       }
                       else{
                           // 这一天没有托节奏并且提供了很多盈余的小时,那么这段时间不再连续,即重设天数
                           start = end+1;
                           break;
                       }
                   }
               }
            }
        }
        return res;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值