1
// Brute Force Approach : PrefixSum ((Tiring - Non Tiring) Days) + Checking All Sliding Windows3
// For Longest Well Performing Interval/Window4
// T.C. = O(n^2) , S.C. = O(n)7
public int longestWPI(int[] hours) {10
int[] prefixSumTiringDaysMinusNonTiringDaysArr = new int[n + 1];11
prefixSumTiringDaysMinusNonTiringDaysArr[0] = 0;13
int prefixSumTiringDaysCount = 0;14
int prefixSumNonTiringDaysCount = 0;16
for (int i = 0; i < n; i++) {17
int noOfHoursWorkedToday = hours[i];19
if (noOfHoursWorkedToday > 8) {20
prefixSumTiringDaysCount++;22
prefixSumNonTiringDaysCount++;25
prefixSumTiringDaysMinusNonTiringDaysArr[i + 1] =26
prefixSumTiringDaysCount - prefixSumNonTiringDaysCount;27
// System.out.print(prefixSumTiringDaysMinusNonTiringDaysArr[i] + " ");29
// System.out.println(prefixSumTiringDaysMinusNonTiringDaysArr[n]);31
int longestLengthOfContinuousPositiveSequence = 0;33
for (int currentSlidingWindowLength = 1;34
currentSlidingWindowLength <= n;35
currentSlidingWindowLength++) {36
// System.out.print(currentSlidingWindowLength + " - ");37
for (int i = 0; i <= n - currentSlidingWindowLength; i++) {38
int j = i + currentSlidingWindowLength - 1;39
// System.out.print(i + "," + j + " ");40
int currentIntervalNoOfTiringDaysMinusNonTiringDays =41
prefixSumTiringDaysMinusNonTiringDaysArr[j + 1]42
- prefixSumTiringDaysMinusNonTiringDaysArr[i];43
if (currentIntervalNoOfTiringDaysMinusNonTiringDays44
> 0) { // => currentInterval = Well Performing Interval45
longestLengthOfContinuousPositiveSequence =46
Math.max(currentSlidingWindowLength, longestLengthOfContinuousPositiveSequence);49
// System.out.println();51
// System.out.println();53
int lengthOfLongestWellPerformingInterval = longestLengthOfContinuousPositiveSequence;55
return lengthOfLongestWellPerformingInterval;