leetcode *5434. 刪掉一個元素以後全爲 1 的最長子數組(雙週賽29)

【題目】*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;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章