当前位置:网站首页>1493. 删掉一个元素以后全为 1 的最长子数组

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

2022-06-11 09:06:00 Mr Gao

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

给你一个二进制数组 nums ,你需要从中删掉一个元素。

请你在删掉元素的结果数组中,返回最长的且只包含 1 的非空子数组的长度。

如果不存在这样的子数组,请返回 0 。

提示 1:

输入:nums = [1,1,0,1]
输出:3
解释:删掉位置 2 的数后,[1,1,1] 包含 3 个 1 。

示例 2:

输入:nums = [0,1,1,1,0,1,1,0,1]
输出:5
解释:删掉位置 4 的数字后,[0,1,1,1,1,1,0,1] 的最长全 1 子数组为 [1,1,1,1,1] 。

示例 3:

输入:nums = [1,1,1]
输出:2
解释:你必须要删除一个元素。

这题其实也还简单,我们照常做就可以了,其实需要遍历一遍题数据。然后,每次碰到一个零,我们都去做一次消除判断,即可求出最优解,解题代码如下:

int longestSubarray(int* nums, int numsSize){
    
    int max=0;
    int num=0;
    int i;
    int pre=0;
    int r=0;
    for(i=0;i<numsSize;i++){
    
        if(nums[i]==1){
    
            num++;
        }
        if(nums[i]==0){
    
            r=1;
            if(num+pre>max){
    
                max=num+pre;
            }
            pre=num;
             num=0;
        }
    }
    if(nums[numsSize-1]==1){
    
          if(num+pre>max){
    
                max=num+pre;
            }

    }
    if(r==0){
    
        return num-1;
    }
   
    return max;

}
原网站

版权声明
本文为[Mr Gao]所创,转载请带上原文链接,感谢
https://blog.csdn.net/weixin_43327597/article/details/125208096