Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonでの最長のパフォーマンス間隔


時間リストがあるとすると、これは特定の従業員の1日あたりの労働時間数のリストです。ここで、1日は、労働時間数が(厳密に)8を超える場合にのみ、疲れた日と見なされます。1つの良好な間隔とは、疲れた日数がその数よりも厳密に多い日数の間隔です。疲れない日の。パフォーマンスが最も長い間隔の長さを見つける必要があります。したがって、入力が[9,9,6,0,6,6,9]のようである場合、出力は3になります。これは、パフォーマンスが最も長い間隔が[9,9,6]>

これを解決するには、次の手順に従います-

  • temp:=0とans:=0を設定し、1つのマップdを作成し、corner:=0
  • 0から時間配列のサイズまでの範囲のiの場合– 1
    • temp:=temp + 1(時間[i]> 8の場合)、それ以外の場合は-1
    • hours [i]> 8の場合、コーナー=1
    • temp> 0の場合、ans:=ansの最大値とi+ 1
    • tempがマップdにない場合、d [temp]:=i
    • マップdでtemp– 1の場合、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

  1. Pythonで最長の回文部分文字列

    文字列Sがあるとします。Sで最も長い回文部分文字列を見つける必要があります。文字列Sの長さは1000であると想定しています。したがって、文字列が「BABAC」の場合、その場合、最長の回文部分文字列は「BAB」です。 これを解決するために、次の手順に従います 文字列の長さと同じ次数の正方行列を1つ定義し、Falseで埋めます 主対角要素をtrueに設定して、0からorder –1までのすべてのiに対してDP[i、i] =True start:=0 範囲2からS+1の長さのlの場合 0からSの長さの範囲のiの場合– l + 1 end:=i + l l =2の場合、 S [i]

  2. Pythonで文字を繰り返さない最長の部分文字列

    文字列があるとします。文字を繰り返さずに最長の部分文字列を見つける必要があります。したがって、文字列が「ABCABCBB」のような場合、長さ3の繰り返しの部分文字列があるため、結果は3になります。これが「ABC」です。 これを解決するために、次の手順に従います set i:=0、j:=0、情報を保存するために1つのマップを設定します ans:=0 whilej<文字列の長さs map [s [j]]の場合、 ans:=max(ans、j – i + 1) map [s [j]]:=j それ以外の場合 i:=map [s [j]] + 1 ans:=max(ans、