当前位置:首页 > 编程笔记 > 正文
已解决

LeetCode_滑动窗口_中等_1493.删掉一个元素以后全为 1 的最长子数组

来自网友在路上 181881提问 提问时间:2023-09-24 06:56:26阅读次数: 81

最佳答案 问答题库818位专家为你答疑解惑

目录

  • 1.题目
  • 2.思路
  • 3.代码实现(Java)

1.题目

给你一个二进制数组 nums ,你需要从中删掉一个元素。请你在删掉元素的结果数组中,返回最长的且只包含 1 的非空子数组的长度。如果不存在这样的子数组,请返回 0。

提示 1:
输入:nums = [1,1,0,1]
输出:3
解释:删掉位置 2 的数后,[1,1,1] 包含 3 个 1 。

示例 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] 。

示例 3:
输入:nums = [1,1,1]
输出:2
解释:你必须要删除一个元素。

提示:
1 <= nums.length <= 105
nums[i] 要么是 0 要么是 1 。

2.思路

(1)滑动窗口

3.代码实现(Java)

//思路1————滑动窗口
class Solution {public int longestSubarray(int[] nums) {int n = nums.length;// arr[0]、arr[1] 分别保存滑动窗口内 0、1 的数量int[] arr = new int[2];int left = 0;int right = 0;int res = 0;while (right < n){int inC = nums[right++];arr[inC]++;//保证滑动窗口中的 0 的数量不超过 1while (arr[0] > 1){int outC = nums[left++];arr[outC]--;}res = Math.max(res, arr[0] == 0 ? arr[1] - 1 : arr[1]);}return res;}
}
查看全文

99%的人还看了

猜你感兴趣

版权申明

本文"LeetCode_滑动窗口_中等_1493.删掉一个元素以后全为 1 的最长子数组":http://eshow365.cn/6-12599-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!