Python 中最長的良好效能區間


假設我們有一個 hours 列表,這是一個給定員工每天工作的小時數列表。這裡,當且僅當工作的小時數(嚴格)大於 8 時,一天被認為是辛苦的一天。一個良好的效能區間是指工作日區間,其中辛苦天數嚴格大於非辛苦天數。我們需要找到最長良好效能區間的長度。因此,如果輸入類似於 [9,9,6,0,6,6,9],則輸出將為 3。這是因為最長的良好效能區間是 [9,9,6]

為了解決這個問題,我們將遵循以下步驟 -

  • 設定 temp := 0 和 ans := 0,建立一個對映 d,以及 corner := 0
  • 對於 i 從 0 到 hours 陣列的大小 - 1
    • 如果 hours[i] > 8,則 temp := temp + 1,否則 temp := -1
    • 如果 hours[i] > 8,則 corner = 1
    • 如果 temp > 0,則 ans := ans 和 i + 1 的最大值
    • 如果 temp 不在對映 d 中,則 d[temp] := i
    • 如果 temp – 1 在對映 d 中,則 ans := ans 和 i – d[temp – 1] 的最大值

讓我們看看下面的實現,以便更好地理解 -

示例

 線上演示

class Solution(object):
   def longestWPI(self, hours):
      temp = 0
      ans = 0
      d = {}
      corner = 0
      for i in range(len(hours)):
         temp += 1 if hours[i]>8 else -1
         if hours[i]>8:
            corner = 1
         if temp>0:
            ans = max(ans,i+1)
         if temp not in d:
            d[temp]=i
         if temp-1 in d:
            ans = max(ans,i-d[temp-1])
      return max(ans,0)
ob = Solution()
print(ob.longestWPI([9,9,6,0,6,6,9]))

輸入

[9,9,6,0,6,6,9]

輸出

3

更新於: 2020年4月30日

192 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告