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;
        }
    }
相关推荐
ZhengEnCi8 小时前
GPT-6 Astra 爆改 Qwen 权重真有那么神吗:权重空间编程 0.016% 参数的真相
算法·架构
罗西的思考8 小时前
【轻量化复刻大模型 / KIMI K3】KDA(Kimi Delta Attention):并行
人工智能·算法·机器学习
夜不会漫长11 小时前
C++:红黑树
数据结构·算法
文丑颜不良啊11 小时前
LeetCode1661~1680题目解析
java·leetcode
AI备案指南-满满11 小时前
算法备案审核不通过,一般是什么原因?
java·人工智能·算法·大模型备案·算法备案·大模型登记
Ramble_Naylor11 小时前
Rust深度解读:Send 与 Sync 的本质与线程安全边界
python·算法·rust
秋天的怀念_David12 小时前
算法一千零一夜 · 第二十三夜 电力民生写成的曲线
java·程序人生·算法
不一样的故事12612 小时前
NB/T 47013.8-2015 附录D 吸枪技术
人工智能·经验分享·算法
通问AI12 小时前
用 200 行 Python 给文档库做「上下文完整度」自检:四个可复算的检查项
算法
揽星河..12 小时前
【C语言】扫雷游戏
c语言·算法·游戏