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

你可能感兴趣的:(数据结构与算法,算法,leetcode,数据结构)