个人主页:Lei宝啊
愿所有美好如期而遇
力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/max-consecutive-ones-iii/
算法原理
滑动窗口其实就是种双指针,只是这种双指针只向后移动,不会回退,具有单调性,也就是说,整个过程中left和right只会++。
本题去反转0,反转个数为k,也就是说,可以往后遍历,为0,记录一次,没超过k,继续向后走,超过k,则使左边向右走过一个0,右边继续向后走,我们画图来看。
图示
以此类推,下面不再继续画。
代码
class Solution {
public:int longestOnes(vector<int>& nums, int k) {int count = 0 , len = 0;for(int left = 0, right = 0; right < nums.size(); right++){if(nums[right] == 0){count++;while(count > k)if(nums[left++] == 0){count--;} } len = max(len, right-left+1); }return len;}
};