最大连续1的个数
- .
- 题目链接
- 题目详情
- 题目解析
- 算法原理
- 滑动窗口
- 定义指针和其他变量
- 进窗口
- 判断
- 出窗口
- 结束
- 更新结果
- 我的答案
.
题目链接
最大连续1的个数
题目详情
题目解析
将题目转化为求一个最长的字串,字串中0的个数不能大于k个
算法原理
滑动窗口
这道题采用滑动窗口的思想
定义指针和其他变量
int left = 0,right = 0,//两个同向指针
n = nums.length,//数组长度
zero = 0,//计数器,计算零的个数
ret = 0;//返回值,最长的子串的长度
进窗口
right所指的位置上如果是0,则让计数器加一,并在执行一次逻辑过后向右移动一位
判断
判断当前窗口内零的个数是否大于k
出窗口
如果left当前所指的位置是0,则计数器减一,并跳过当前位置,往右移动一位,然后继续进入判断环节,直到窗口合法
结束
当right到达数组结尾的时候
更新结果
当窗口内的数据处于合法的时候,就可以更新结果
我的答案
class Solution {
public int longestOnes(int[] nums, int k) {
//定义指针
int left = 0,right = 0,n = nums.length,zero = 0,ret = 0;
for(;right<n;right++){
//进窗口
//如果是0,计数器加1
if(nums[right]==0) zero++;
//判断
while(zero>k){
//不合法则出窗口
//如果是0,zero减一,并让left左移
if(nums[left++]==0) zero--;
}
//窗口内数据合法,更新结果
ret = Math.max(ret,right-left+1);
}
//返回结果
return ret;
}
}