1124 表現良好的最長時間段

2022-05-01 17:54:08 字數 982 閱讀 7693

題意:

給你乙份工作時間表 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;

**:

class

solution

}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]**:

class

solution

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 小時的時候,那麼這一天就是 勞累的一天 所謂 表現良好的時間段 意味在這段時間內,勞累的天數 是嚴格 大於 不勞累的天數 請你返回 表現良好時間段 的最大長度。解題思路...