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之類的。

相關文章
相關標籤/搜索