5129. 表现良好的最长时间段(数组)

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

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

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

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

 

示例 1:blog

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

 

提示:内存

  • 1 <= hours.length <= 10000
  • 0 <= hours[i] <= 16

 

题目连接:leetcode

https://leetcode-cn.com/contest/weekly-contest-145/problems/longest-well-performing-interval/get

 

/**
 * @param {number[]} hours
 * @return {number}
 */
var longestWPI = function(hours) {
    let arr = [];
    for (var i = 0; i < hours.length; i++) {
        for (var j = i+1; j <= hours.length; j++) {
            let lao=0, xiu=0, subArr = hours.slice(i, j);
            subArr.forEach(s=>{
                if(s>8){
                    lao++
                }else {
                    xiu++
                }
            })
            if(lao>xiu){
                pushArr(arr, subArr);
            }
            
        }
    }
    if(!arr.length) return 0;
    let maxLenArr = arr[0];
    for (var i = 1; i < arr.length; i++) {
        if(arr[i].length>maxLenArr.length){
            maxLenArr = arr[i]
        }
    }
    return maxLenArr.length;
};
let pushArr =function(arr, subArr){
    arr.push({
            subArr: subArr,
            length: subArr.length
        });
}

 

 

/**
 * @param {number[]} hours
 * @return {number}
 */
var longestWPI = function(hours) {
     let n = hours.length;
     let array = new Array(n);
    for(let i = 0; i < n; i++){
        if(hours[i] > 8)
            array[i] = 1;
        else
            array[i] = -1;
    }
    let ans = 0;
    for(let i = 0; i < n; i++){
        let temp = 0;
        for(let j = i; j < n; j++){
            temp += array[j];
            if(temp > 0)
                ans = Math.max(ans, j-i+1);
        }
    }
    return ans;
};

 

我的理解:io

这种双层for循环对子数组进行处理的问题。for循环

像这种求最值,多层循环又会出现内存溢出的问题。老是会出现额外的数组,还有Math.max之类的。

相关文章
相关标签/搜索