【題目】*5434. 刪掉一個元素以後全爲 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
解釋:你必須要刪除一個元素。
示例 4:
輸入:nums = [1,1,0,0,1,1,1,0,1]
輸出:4
示例 5:
輸入:nums = [0,0,0]
輸出:0
提示:
1 <= nums.length <= 10^5
nums[i] 要麼是 0 要麼是 1 。
【解題思路1】
記錄0左邊和右邊1的個數的思路,在碰到0的時候更新left和right的值
class Solution {
public int longestSubarray(int[] nums) {
int max = 0;
int left = 0; //當前0左邊1的個數
int right= 0; //當前0右邊1的個數
int n = nums.length;
for (int i = 0; i < n; ++i) {
if (nums[i] == 1) {
left++;
right++;
max = Math.max(max, left);
} else {
left = right; //原來右邊的1變成了這個0的左邊的1
right= 0; //重新開始計數這個0的右邊1的個數
}
}
if (max == n) max--; //全1的情況
return max;
}
}