給你一份工做時間表 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之類的。