LeetCode刷题滑动窗口(最大连续1的个数三+将x减到0的最小操作数)Java

一,最大连续1的个数三

解题思路:

这题我们通过暴力枚举,也就是将所有的数组都列出来,有零的就翻转到最多能翻转为止,但是这样的方法,会很麻烦,因为翻转的操作会导致你后一个列出的数组的0得重新翻转回去。所以好的方法就是**找到一个拥有个数最多为k且数组长度最长的一个数组,**并且你在通过这样的方式进行列举的时候,你会发现可以使用滑动窗口的思想来优化解决,思路看我的画图演示

代码演示:

java 复制代码
    public int longestOnes(int[] nums, int k) {
        int len=0;
        for (int left = 0,right=0,zero=0; right <nums.length ; right++) {
            if (nums[right]==0){
                zero++;
            }
            while (zero>k){
                //移动left以及更新len
                if (nums[left]==0){
                    zero--;
                }
                left++;
            }
            len=Math.max(len,right-left+1);
        }
        return len;
    }

二,将x减到0的最小操作数

解题思路:

我们反向来思考,我们不是将目标元素减到0,而是我们根据左右两个指针之间的数组范围相加得到数组总数减去目标元素,跟上题的思路是类似的,那我们怎么看是不是使用这个滑动窗口呢,因为当我们看到我们的指针都是朝同一个方向前进的时候就可以省略一些不必要的回退,就会跟一个窗口一样了

代码演示:

我们滑动窗口主要的写代码模式就是进窗口,判断条件出窗口,然后更新结果,不过这个更新结果可能需要根据题目要求来

java 复制代码
    public int minOperations(int[] nums, int x) {
        int len=0,left = 0,right=0,sum=0,ret=-1;
        int sumnum = 0;
        for (int i = 0; i < nums.length; i++) {
            sumnum += nums[i];
        }

        if (sumnum-x<0){
            return -1;
        }
        for (right=0;right<nums.length;right++){
            //进窗口
            
                sum+=nums[right];
            
            //判断条件,看看什么时候出窗口,也就是left要移动的时候
            while (sum>sumnum-x){
                sum-=nums[left++];
            }
            if (sum==sumnum-x){
                ret=Math.max(ret,right-left+1);
            }
        }
        if (ret==-1){
            return -1;
        }else {
            return nums.length-ret;
        }
    }
相关推荐
考研保研资料分享3 小时前
普通211核专业保研经验:清华预推免录取与北大、西交面试复盘
面试·职场和发展
背调与用工合规夏律师3 小时前
知情同意在跨境提供与境外接收方信息上的证据要求
职场和发展
bnmoel3 小时前
C++ 基础入门篇(六)类和对象-第三篇:运算符重载
开发语言·c++·算法·语法·运算符重载
wuyk5554 小时前
28 搜索引擎索引更新:从 LSM Tree 到布隆过滤器的高效实现
stm32·单片机·嵌入式硬件·算法
我命由我123454 小时前
LRU 缓存淘汰策略
数据结构·redis·学习·mysql·算法·缓存·学习方法
SunShaoLu4 小时前
流程图工具怎么选:5 款产品的技术对比与选型实践
人工智能·职场和发展·流程图·效率工具
垆边人似月.4 小时前
华为题:合并区间
数据结构·c++·算法
垆边人似月.4 小时前
华为题:滑动窗口最大值
数据结构·c++·算法
2601_965742224 小时前
AI是怎么判断一家本地商家值得推荐的?云南老板看完这篇就懂了
大数据·人工智能·算法·ai·新媒体运营