一、题目描述
二、解题思路
采用双指针的方法来解决这个问题。
定义变量countzero来记录窗口内0的数量,当countzero大于k时,窗口收缩,left移动到窗口内第一个0的后面一个位置,将这个弹出来的“翻转机会”让给right指向的数,直到right出界,即循环结束。
三、代码实现
时间复杂度:T(n)=O(n)
空间复杂度:S(n)=O(1)
class Solution {
public:int longestOnes(vector<int>& nums, int k) {//滑动窗口int left=0,right=0,n=nums.size();int ret=0,countzero=0;while(right<n){//进窗口if(nums[right]==0) countzero++;//出窗口while(countzero > k){if(nums[left]==0) countzero--;left++;}//更新ret=max(ret,right-left+1);right++;}return ret;}
};