【LeetCode刷题】Day 8
题目1:1004.最大连续1的个数 III
思路分析:
如果我们根据题干意思来做,每次寻找并翻转k个0的话,难度还是比较大,很复杂。我们不妨使用zero计数器来控制0的数量,控制在k以内。
思路1:暴力枚举+zero计数器
思路2:滑动窗口+zero计数器
-
本题滑动窗口分析:
-
1. 进窗口: 当
nums[right]!=0或者zero小于k
,就进窗口,执行right++
。意思就是right++就代表符合题意。 -
2. 判断: 主要目的是更新
left
到符合题干的位置,即: 减去一个零,使得zero计数器为k的位置。更新到位置也就完成了 出窗口。 -
3. 更新结果:
ret
是满足一个就更新一次,进窗口就是增加,出窗口就是减小(所以要和之前的比对,取最大)。
代码实现:
class Solution {
public:
int longestOnes(vector<int>& nums, int k) {
int left=0,right=0,n=nums.size();
int zero=0