1004. 最大连续1的个数 III
小于 1 分钟
1004. 最大连续1的个数 III中等
解题思路:
- 使用滑动窗口,rihgt在变动时,left也跟着边。
- 当
right为1
时或者left到right中的0个数小于k
,不断移动rihgt - 当
right为0
,由于上一个条件判断为right < k
。因此此时left与right中间的0的个数等于k。
故更新res
更新left
,直到left指向第一个0的后一位
class Solution {
public int longestOnes(int[] nums, int k) {
int n=nums.length,l,r,cnt=0,res=0;
for(l=r=0;l<n;){
while(r<n&&(nums[r]==1||cnt<k)) if(nums[r++]==0) cnt++;
if(r-l>res) res=r-l;
if(nums[l++]==0) cnt--;
}
return res;
}
}
Powered by Waline v2.15.5