Longest Well-Performing Interval
We are given hours
, a list of the number of hours worked per day for a given employee.
A day is considered to be a tiring day if and only if the number of hours worked is (strictly) greater than 8
.
A well-performing interval is an interval of days for which the number of tiring days is strictly larger than the number of non-tiring days.
Return the length of the longest well-performing interval.
Example 1:
Input: hours = [9,9,6,0,6,6,9]
Output: 3
Explanation: The longest well-performing interval is [9,9,6].
Constraints:
1 <= hours.length <= 10000
0 <= hours[i] <= 16
class Solution {
public int longestWPI(int[] hours) {
if (hours.length == 0)
return 0;
int maxLen = 0;
Map<Integer, Integer> map = new HashMap();
// key is possible sum in hours array, value is index where that sum
// appears for the first time
int sum = 0; // sum at index i indicates the sum of hours[0:i] after transformation
for (int i = 0; i < hours.length; i++) {
sum += hours[i] > 8 ? 1 : -1; // transform each hour to 1 or -1
if (!map.containsKey(sum))
map.put(sum, i); // record where the sum appears for the first time
if (sum > 0) // in hours[0:i], more 1s than -1s
maxLen = i + 1;
else if (map.containsKey(sum - 1))
// get the index j where sum of hours[0:j] is sum - 1, so that sum of
// hours[j+1:i] is 1
maxLen = Math.max(maxLen, i - map.get(sum - 1));
}
return maxLen;
}
}
Last updated