淘宝网站怎么做视频教程,设计门户网站,wordpress插件内链,天河区门户网站教育专栏解法一#xff1a;暴力枚举 先定义left和right双指针#xff0c;left先固定在起始位置#xff0c;遍历right当值等于1的时候#xff0c;直接跳过#xff0c;等于0的时候#xff0c;zero计数器加一当zero等于k的时候#xff0c;就开始记录此时最大长度是多少然后left加一… 解法一暴力枚举 先定义left和right双指针left先固定在起始位置遍历right当值等于1的时候直接跳过等于0的时候zero计数器加一当zero等于k的时候就开始记录此时最大长度是多少然后left加一right返回在重新遍历 解法二滑动窗口优化暴力枚举 还是先定义left和right双指针left先固定在起始位置遍历right当值等于1的时候直接跳过等于0的时候zero计数器加一进窗口当zero大于k的时候就开始判断left位置的值当值等于1 的时候leftzero不变当值等于0的时候leftzero--出窗口最后更新最大值结果 代码
public int longestOnes(int[] nums, int k) {int n nums.length;int left 0;int right 0;int zero 0;int Max 0;while(right n){//进窗口if(nums[right] 1){right;}else{zero;right;}//判断while(zero k){//出窗口if(nums[left] 1){left;}else{zero--;left;}}//更新结果Max Math.max(Max,right - left );}return Max;} 写法二
public int longestOnes(int[] nums, int k) {int ret 0;for(int left 0, right 0, zero 0; right nums.length; right){if(nums[right] 0){//进窗口zero;}while(zero k){//判断//出窗口 if(nums[left] 0){zero--;}}//更新结果ret Math.max(ret,right - left1);}return ret;}