DSSW:MAX

这里记录不定长滑窗:最长/最大值题单题解。

1. LC 1493 删除一个元素以后全为1的最长子数组

因为删且仅删一个元素,所以可以直接用一个标记位来记录这个删除的索引。

首先我们要肯定的一点是,除非整个数组都是1,不然肯定不删1的,删0的效果等于或优于删1,所以碰到1我们直接给长度+1就行。

  1. 如果当前元素是0
    1. 如果这个索引合法(例如≠-1),那么说明之前删过了,我们就得把之前删除的位置前面的所有1全部舍弃(舍弃过程中维护最大值),然后从上一次删除的位置后面一个位置开始算起,并更新当前位置是删除位置
    2. 如果这个索引不合法,说明压根没删过,那么把这个当前的位置记录为删除的位置,然后继续即可。
  2. 如果当前元素为1,那么直接长度+1,过。原因上面说了。

最后,这个题是必须删一个的,所以如果最后长度等于数组长度的话,就等于没删,需要删一个。

class Solution {
    public int longestSubarray(int[] nums) {
        int n = nums.length;
        if(n==1){
            return 0;
        }
        int rp = 0;
        int cur = 0;
        int ans = 0;
        int lz = -1;
        while(rp<n){
            if(nums[rp]==1){
                cur++;
            }else{
                if(lz!=-1){
                    ans = Math.max(ans,cur);
                    cur = rp-lz-1;
                }
                lz = rp;
            }
            rp++;
            ans = Math.max(cur,ans);
        }
        return ans==n?n-1:ans;
    }
}

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-07 16:12:02       91 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-07 16:12:02       97 阅读
  3. 在Django里面运行非项目文件

    2024-01-07 16:12:02       78 阅读
  4. Python语言-面向对象

    2024-01-07 16:12:02       88 阅读

热门阅读

  1. c++实验 引用与指针

    2024-01-07 16:12:02       62 阅读
  2. ECMAScript2015(ES6)

    2024-01-07 16:12:02       47 阅读
  3. 20240107 SQL基础50题打卡

    2024-01-07 16:12:02       67 阅读
  4. 业务数据技术中台概念与相互关系

    2024-01-07 16:12:02       55 阅读
  5. Kotlin: Jetpack — LiveData简单应用

    2024-01-07 16:12:02       71 阅读
  6. 一步一步写线程之四简单线程池

    2024-01-07 16:12:02       40 阅读
  7. 家谱管理系统的设计与实现(c语言)

    2024-01-07 16:12:02       94 阅读