ARTS Week 50
Algorithm 本周的算法题为 1493. 删掉一个元素以后全为 1 的最长子数组 给你一个二进制数组 nums ,你需要从中删掉一个元素。 请你在删掉元素的结果数组中,返回最长的且只包含 1 的非空子数组的长度。 如果不存在这样的子数组,请返回 0 。 示例 2: 输入:nums = [0,1,1,1,0,1,1,0,1] 输出:5 解释:删掉位置 4 的数字后,[0,1,1,1,1,1,0,1] 的最长全 1 子数组为 [1,1,1,1,1] 。 实现代码如下: const longestSubarray = function (nums) { // 检查数组是否全为1 function isAllOnes(arr) { return arr.every(n => n === 1); } // 检查数组是否全为0 function isAllZeros(arr) { return arr.every(n => n === 0); } // 处理数组,返回最长连续1的长度 function processArray(arr) { const str = arr.join(""); const segments = str.split('0'); let maxLength = 0; for (let segment of segments) { if (segment.length > maxLength) { maxLength = segment.length; } } return maxLength; } if (isAllOnes(nums)) { return nums.length - 1; } if (isAllZeros(nums)) { return 0; } // 找出所有满足条件的0的位置 const zeroIndices = []; for (let i = 0; i < nums.length; i++) { if (nums[i] === 0 && (nums[i - 1] === 1 || nums[i + 1] === 1)) { zeroIndices.push(i); } } if (zeroIndices.length === 0) { return processArray(nums); } let maxResult = 0; zeroIndices.forEach(index => { const modifiedArray = JSON.parse(JSON.stringify(nums)); modifiedArray[index] = 1; const currentMax = processArray(modifiedArray); if (currentMax > maxResult) { maxResult = currentMax; } }); return maxResult - 1; }; 解题思路: ...