problem:1493. 删掉一个元素以后全为 1 的最长子数组
思路:可以滑动窗口来做,保证窗口中只有至多一个0,当枚举到了0的时候,把对头弹出,直到cnt_0的为0为止。
Accode:
class Solution {
public:
int longestSubarray(vector<int>& nums) {
int len = nums.size();
deque<int>deq;
int cnt_zero=0;
int ans = 0;
for(int i=0;i<len;i++){
while(deq.size() && nums[i]==0){
if(cnt_zero>=1){
if(!nums[deq.front()]){
cnt_zero--;
}
}
else break;
deq.pop_front();
}
deq.push_back(i);
if(!nums[i]) cnt_zero++;
ans = max(ans,(int)deq.size());
}
return ans-1;
}
};
时间复杂度:$o(n)$