题目链接
力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
题目解析
硬往题目介绍上边去想的话其实非常困难,如果换种方式思考就会简单许多。
若我们将思想转化为,找出最长的子串(里面含有的0的数量最大为k),然后返回其最长长度。
这样思路就清晰了许多,那么我们使用一个zero变量来记录0的个数,利用滑动窗口思想来解决,若当前进窗口的值是0那么zero++,若出窗口的该值是0那么zero--,保证zero<=k即可。
代码
class Solution
{
public:int longestOnes(vector<int>& nums, int k) {int n=nums.size();int ret=0;for(int left=0,zero=0,right=0;right<n;right++){// 进窗口// 如果该数是0 那么我们zero变量就++ if(nums[right]==0) zero++;// 出窗口// 若此时zero的大小已经大于kwhile(zero>k){// 出窗口if(nums[left]==0)zero--;// 更新窗口left++;}// 更新结果ret=max(ret,right-left+1);}return ret;}
};