免费网站优缺点,游戏网页设计教程,域名购买平台哪个好,制作简单的网页算法原理#xff1a;
这道题大眼一看是关于翻转多少个0的问题#xff0c;但是#xff0c;如果你按照这种思维去做题#xff0c;肯定不容易。所以我们要换一种思维去做#xff0c;这种思维不是一下就能想到的#xff0c;所以想不到也情有可原。 题目是#xff1a;给定一…
算法原理
这道题大眼一看是关于翻转多少个0的问题但是如果你按照这种思维去做题肯定不容易。所以我们要换一种思维去做这种思维不是一下就能想到的所以想不到也情有可原。 题目是给定一个二进制数组 nums 和一个整数 k如果可以翻转最多 k 个 0 则返回 数组中连续 1 的最大个数 。 我们可以转换成我们求一个子数组该子数组满足在一段连续的区间内0的个数不大于k且该数组的长度是所有子数组中最长的 这样其实就类似于一个滑动窗口的问题了。 如果还没有看明白没关系。详细解释一下对比以前的滑动窗口以前的判断条件是求某一段的和最大/求某一段含有不重复的字符最多……只不过这次的判断条件是0的个数不能超过k由于这个条件对我们子区间内还要进行操作所以可能会使你下不去手困惑。 但是只要抓住本质按照那个模版来就能写对这还需要平时多练。 暴力解法就不展示了就是两个for循环枚举。
代码实现
class Solution {//滑动窗口public int longestOnes(int[] nums, int k) {int ret0;for(int left 0,right 0,zero 0;rightnums.length;right){if(nums[right] 0){zero;//进窗口}while(zerok){//判断if(nums[left] 0){zero--;//出窗口}}ret Math.max(ret,right - left 1);//更新结果}return ret;}
}