題意:
給你乙份工作時間表 hours,上面記錄著某一位員工每天的工作小時數。
我們認為當員工一天中的工作小時數大於 8 小時的時候,那麼這一天就是「勞累的一天」。
所謂「表現良好的時間段」,意味在這段時間內,「勞累的天數」是嚴格 大於「不勞累的天數」。
請你返回「表現良好時間段」的最大長度。
示例 1:
輸入:hours = [9,9,6,0,6,6,9]
輸出:3
解釋:最長的表現良好時間段是 [9,9,6]。
1 <= hours.length <= 10000
0 <= hours[i] <= 1
題解:方法1.(o(n))
貪心,雜湊表
大於8的記為1,小於等於1的記為-1;用雜湊表維護一些字首和的位置;從開頭遍歷陣列,如果sum>0,答案更新為i+1,否則在雜湊表中查詢有沒有sum-1的記錄,如果有則更新ans=max(ans,i-visit[sum-1]),如果沒有sum的記錄,則新增 visit[sum]=i;
**:
classsolution
}return
ans;
}};
方法二:
二分o(nlogn)
字首和陣列sum,sum[0]=0;
對於每乙個區間右端點i,我們都期望找到小標最小的0<=j如果j>i且sum[j]>sum[i],則j無論如何都不可能成為區間的左端點,因為用i更優
由此可見,我們僅需要維護乙個單調遞減的陣列mono,mono存放下標,對於每乙個可能的區間右端點i,通過二分的方法找到最小的j,滿足sum[j]**:
classsolution
if(sum[mono[l]]ans=max(ans,i-mono[l]);
else
mono.push_back(i);
}return
ans;
}};
1124 表現良好的最長時間段 字首和 雜湊表
難度 中等 題目描述 解題思路 看到這種 要求連續區間而且滿足一定條件,最大 最小等等都可以考慮一下字首和法。字首和最大的醫用就是可以在o 1 時間內得到任意乙個區間 i,j 的和。在這道題裡,當工作時間大於8,設定成1,小於8等於 1,由此計算字首和 如果字首和大於0,說明從0開始的區間裡到當前位...
Medium表現良好的最長時間段 python
給你乙份工作時間表 hours,上面記錄著某一位員工每天的工作小時數。我們認為當員工一天中的工作小時數大於 8 小時的時候,那麼這一天就是 勞累的一天 所謂 表現良好的時間段 意味在這段時間內,勞累的天數 是嚴格 大於 不勞累的天數 請你返回 表現良好時間段 的最大長度。示例 1 輸入 hours ...
1124 表現良好的最長時段
同類題目 題目描述 給你乙份工作時間表 hours,上面記錄著某一位員工每天的工作小時數。我們認為當員工一天中的工作小時數大於 8 小時的時候,那麼這一天就是 勞累的一天 所謂 表現良好的時間段 意味在這段時間內,勞累的天數 是嚴格 大於 不勞累的天數 請你返回 表現良好時間段 的最大長度。解題思路...