题目:删掉一个元素以后全为 1 的最长子数组

原笔记(代码待复核)

维护一个滑动窗口,窗口内只能存在一个零,同时每一步都动态更新最长子数组的长度

当窗口内零的数量大于一时,将左边界右移,直到零的数量变为一

longestSubarray()

 1int longestSubarray(vector<int>& nums)
 2{
 3    int left = 0, zero_count = 0, res = 0;
 4
 5    for(int right = 0; right < nums.size(); right++)
 6    {
 7        if(nums[right] == 0)
 8            zero_count++;
 9
10        while(1 < zero_count)
11        {
12            if(nums[left] == 0)
13                zero_count--;
14
15            left++;
16        }
17
18        res = std::max(right - left + 1 - 1,);
19    }
20    return res;
21}

来源:语雀原笔记