근무 시간 목록이 있다고 가정합니다. 이것은 주어진 직원의 하루 근무 시간 목록입니다. 여기서 하루는 근무한 시간이 (엄격히) 8보다 큰 경우에만 피곤한 날로 간주됩니다. 하나의 성과가 좋은 구간은 피곤한 날의 수가 숫자보다 엄격하게 큰 날의 간격입니다. 피곤하지 않은 날. 우리는 가장 긴 성과를 내는 구간의 길이를 찾아야 합니다. 따라서 입력이 [9,9,6,0,6,6,9]와 같으면 출력은 3이 됩니다. 이는 가장 잘 수행되는 간격이 [9,9,6]
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- temp :=0 및 ans :=0으로 설정하고 하나의 맵을 d로 만들고 모서리 :=0
- 0에서 시간 배열의 크기 범위에 있는 i의 경우 – 1
- temp :=temp + hour[i]> 8이면 1, 그렇지 않으면 -1
- 시간[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 longWPI(self, hours):temp =0 ans =0 d ={} corner =0 for i in range(len(hours)):temp +=1 if hours[i]>8 else -1 if hour[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 =최대(ans,i-d[temp-1]) 반환 최대(ans,0)ob =Solution()print(ob.longestWPI([9,9,6,0,6,6,9]))사전>입력
[9,9,6,0,6,6,9]출력
3