[路飞]_算法成长之路三十五,表现良好的最长时间段

101 阅读1分钟

个人算法成长之路三十五!!!定期更新一些刷题过程中个人的思路以及理解。有兴趣的朋友们可以互动交流哈~

题目:

leetcode-1124. 表现良好的最长时间段

给你一份工作时间表 hours,上面记录着某一位员工每天的工作小时数。

我们认为当员工一天中的工作小时数大于 8 小时的时候,那么这一天就是「劳累的一天」。

所谓「表现良好的时间段」,意味在这段时间内,「劳累的天数」是严格 大于「不劳累的天数」。

请你返回「表现良好时间段」的最大长度。

输入:hours = [9,9,6,0,6,6,9]
输出:3
解释:最长的表现良好时间段是 [9,9,6]

示例 1:

示例 2:

输入:hours = [6,6,6]
输出:0

解题思路:

前缀和

定义一个前缀和数组,代表当前天以前所有工作时长 > 8小时的天数; 那么前缀和数组 两个元素的差 > 0 就是表现良好的时间段,我们只需要求得两个前缀和元素之差的最大值

var longestWPI = function (hours) {
    let preSum = new Array(hours.length + 1).fill(0)
    for (let i = 1; i <= hours.length; i++) {
        if (hours[i-1] > 8) preSum[i] = preSum[i - 1] + 1
        else preSum[i] = preSum[i - 1] - 1
    }
    let max = 0
    for (let i = 0; i< preSum.length-1; i++){
        for (let j =i+1; j< preSum.length; j++){
            if (preSum[j] - preSum[i] >0){
                max = Math.max(max, j-i)
            }
        }
    }
    return max
};