【LeetCode每日一题】——1493.删掉一个元素以后全为 1 的最长子数组

news2024/11/17 19:37:16

文章目录

  • 一【题目类别】
  • 二【题目难度】
  • 三【题目编号】
  • 四【题目描述】
  • 五【题目示例】
  • 六【题目提示】
  • 七【解题思路】
  • 八【时间频度】
  • 九【代码实现】
  • 十【提交结果】

一【题目类别】

  • 滑动窗口

二【题目难度】

  • 中等

三【题目编号】

  • 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
    • 解释:你必须要删除一个元素。

六【题目提示】

  • 1 < = n u m s . l e n g t h < = 1 0 5 1 <= nums.length <= 10^5 1<=nums.length<=105
  • n u m s [ i ] 要么是 0 要么是 1 。 nums[i] 要么是 0 要么是 1 。 nums[i]要么是0要么是1

七【解题思路】

  • 利用滑动窗口的思想
  • 仔细理解题意,要保证滑动窗口内0的个数不超过1个,所以此滑动窗口中保存的数组就是如果删除某个数字后,剩下的子数组就是元素全为1的最长子数组
  • 使用右窗口去遍历数组,如果当滑动窗口中0的个数超过了1个,那么就移动左窗口,总之就是要保证滑动窗口内0的个数不超过1个
  • 最后返回最大的窗口长度即可
  • 还需要注意一个细节,题目要求我们必须删除一个元素,也就是说,最后的返回结果需要减1,因为减1之后的长度,才是全为1的最长子数组的长度

八【时间频度】

  • 时间复杂度: O ( n ) O(n) O(n) n n n为传入数组的大小
  • 空间复杂度: O ( 1 ) O(1) O(1)

九【代码实现】

  1. Java语言版
class Solution {
    public int longestSubarray(int[] nums) {
        int len = nums.length;
        int left = 0;
        int right = 0;
        int zero_count = 0;
        int res = 0;
        while(right < len){
            if(nums[right] == 0){
                zero_count++;
            }
            while(zero_count > 1){
                if(nums[left] == 0){
                    zero_count--;
                }
                left++;
            }
            res = Math.max(res,right - left + 1);
            right++;
        }
        return res - 1;
    }
}
  1. C语言版
int longestSubarray(int* nums, int numsSize)
{
    int len = numsSize;
    int left = 0;
    int right = 0;
    int zero_count = 0;
    int res = 0;
    while(right < len)
    {
        if(nums[right] == 0)
        {
            zero_count++;
        }
        while(zero_count > 1)
        {
            if(nums[left] == 0)
            {
                zero_count--;
            }
            left++;
        }
        res = fmax(res,right - left + 1);
        right++;
    }
    return res - 1;
}
  1. Python语言版
class Solution:
    def longestSubarray(self, nums: List[int]) -> int:
        size = len(nums)
        left = 0;
        right = 0;
        zero_count = 0
        res = 0
        while right < size:
            if nums[right] == 0:
                zero_count += 1
            while zero_count > 1:
                if nums[left] == 0:
                    zero_count -= 1
                left += 1
            res = max(res,right - left + 1)
            right += 1
        return res - 1
  1. C++语言版
class Solution {
public:
    int longestSubarray(vector<int>& nums) {
        int len = nums.size();
        int left = 0;
        int right = 0;
        int zero_count = 0;
        int res = 0;
        while(right < len){
            if(nums[right] == 0){
                zero_count++;
            }
            while(zero_count > 1){
                if(nums[left] == 0){
                    zero_count--;
                }
                left++;
            }
            res = max(res,right - left + 1);
            right++;
        }
        return res - 1;
    }
};

十【提交结果】

  1. Java语言版
    在这里插入图片描述

  2. C语言版
    在这里插入图片描述

  3. Python语言版
    在这里插入图片描述

  4. C++语言版
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/592551.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

wx.request net::ERR_TOO_MANY_REDIRECTS

文章目录 问题解决方法一&#xff1a;请求头里添加Cookies方法二&#xff1a;使用weapp-cookie 问题 使用微信小程序开发者工具开发小程序项目时&#xff0c;wx.request 返回总是报 net::ERR_TOO_MANY_REDIRECTS wx.request发起一个get请求&#xff0c;一直重定向直到请求失败…

Java Web——Session实现购物车

实验名称&#xff1a; Session实现购物车 实验目的&#xff1a; &#xff08;1&#xff09;掌握什么是Cookie对象&#xff0c;掌握Cookie对象的使用 &#xff08;2&#xff09;掌握什么是Session对象&#xff0c;掌握Session对象的使用 &#xff08;3&#xff09;掌握使用…

弗雷歇distanceDTW(动态时间规整)算法(附部分代码)

1、理论知识 1.1 什么是弗雷歇距离&#xff0c;它是用来干什么的&#xff1f; 费雷歇distance是求两个序列匹配之后的最大距离&#xff0c;这里需要明确a&#xff09;两个序列&#xff1b;b&#xff09;匹配过程&#xff1b;c&#xff09;最大距离的含义。 a&#xff09;两个…

【java】 【Springboot】 开发通用审核流程服务模块

完全自研一个极其轻量级 通用审核流程服务 可以进行流程&#xff0c;节点配置&#xff0c;流程&#xff0c;节点审核人权限配置 批量审核&#xff0c;批量驳回&#xff0c;审核&#xff0c;驳回&#xff0c;批量退回第一步&#xff0c;退回第一步等操作 涉及数据库表单字段

OSPF最优路径选择

路由比较 1、内部区域>区域间路由>NSSA1>Nssa2 2、如果只有Ex1、Ex2或者Nssa1、nNssa2开销类型。则Ex1>Ex2或者Nssa1>Nssa2 3、如果Ex1、Nssa1,Ex2和Nssa2,Ex1和Nssa1优于Ex2和Nssa2 4、如果外部开销加上内部开销,Ex1和Nssa1一样,则Ex1和Nssa1相同负载分担 5、如果外…

CVE-2016-1000027安全漏洞分析和解决方案

文章目录 前言复现问题漏洞分析解决办法相关阅读 前言 CVE-2016-1000027 安全漏洞&#xff0c;该漏洞在5.x的最新版本(5.3.27)依然存在,官方未给出任何解决办法。在spring-web6.0之后&#xff0c;则不存在该漏洞。 受影响范围:spring-web<6.0 解决办法&#xff1a;升级到sp…

【机器学习】分类问题和Logistic回归算法详解

在阅读本文前&#xff0c;请确保你已经掌握代价函数、假设函数等常用机器学习术语&#xff0c;最好已经学习线性回归算法&#xff0c;前情提要可参考https://blog.csdn.net/weixin_45434953/article/details/130593910 分类问题是十分广泛的一个问题&#xff0c;其代表问题是&…

图表控件LightningChart JS v.4.1已经发布!引入虚线模式

LightningChart JS是性能最高的JavaScript图表库&#xff0c;专注于实时数据可视化。是Web上性能最高的图表库具有出色的执行性能 - 使用高数据速率同时监控数十个数据源。 GPU加速和WebGL渲染确保您的设备的图形处理器得到有效利用&#xff0c;从而实现高刷新率和流畅的动画。…

固态硬盘基础知识:M.2 NVMe PCIe SATA的含义及区别

SATA接口 固态硬盘开始流行于笔记本电脑上&#xff0c;使用SATA接口&#xff0c;尺寸与笔记本硬盘相同&#xff0c;为2.5英寸。 那个时候&#xff0c;如果台式机需要加装固态硬盘&#xff0c;需要使用硬盘架&#xff0c;将固态硬盘安装在硬盘架上&#xff0c;然后再安装与机箱…

5.2.3 IP数据报(一)IP数据报的格式

5.2.3 IP数据报&#xff08;一&#xff09;IP数据报的格式 我们知道要想实现全球范围的通信除了地址要统一之外&#xff0c;数据格式也要统一&#xff0c;所以就有了IP分组&#xff0c;或者被称之为IP数据报&#xff0c;下面我们来学习IP分组的格式。如图 总体来说一个IP分组…

JetBrains的Java集成开发环境IntelliJ 2023版本在Linux系统的下载与安装配置教程

目录 前言一、IntelliJ安装二、使用配置总结 前言 IntelliJ IDEA Ultimate是一款功能强大的Java集成开发环境&#xff08;IDE&#xff09;。它提供了丰富的功能和工具&#xff0c;可以帮助开发人员更高效地编写、调试和部署Java应用程序。注&#xff1a;已在CentOS7.9和Ubuntu…

带大家来认识下SUMIF函数

如果您需要在Excel表格中对特定条件下的数据进行求和&#xff0c;那么SUMIF函数是一个非常有用的工具。SUMIF函数允许您在满足指定条件的情况下&#xff0c;将符合条件的单元格的值相加起来。在本文中&#xff0c;我们将向您介绍如何使用SUMIF函数来处理您的表格数据。 如下图…

想定制鞋子?先给脚部建模吧!

最近灌篮高手的电影正在火热上映中&#xff0c;湘北大战山王的比赛从漫画搬上了大荧幕&#xff0c;看得人热血沸腾&#xff0c;直呼“爷青回”&#xff0c;恨不得马上换上球衣球鞋&#xff0c;再去球场上挥汗如雨一番。 灌篮高手 同时NBA的季后赛也在如火如荼的进行中&#xf…

Cmake学习记录(九)--使用Cmake交叉编译Android .so库

文章目录 一、前言二、使用NDK进行编译的相关代码四、使用交叉工具链进行编译四、参考链接 一、前言 目前Android编译.so的话使用Android Studio比较简单&#xff0c;但是有时候时候Android Studio的话还需要创建一个Android的项目&#xff0c;这里记录下脱离Android Studio单…

华为OD机试真题B卷 Java 实现【百钱买百鸡问题】,附详细解题思路

一、题目描述 公元五世纪&#xff0c;我国古代数学家张丘建在《算经》一书中提出了“百鸡问题”&#xff1a;鸡翁一值钱五&#xff0c;鸡母一值钱三&#xff0c;鸡雏三值钱一。百钱买百鸡&#xff0c;问鸡翁、鸡母、鸡雏各几何&#xff1f; 现要求你打印出所有花一百元买一百…

2023-05-31-[音视频处理] FFmpeg使用指北1-视频解码

本文将详细介绍如何使用ffmpeg 4.4在C中解码多种格式的媒体文件&#xff0c;这些媒体文件可以是视频、视频流、图片&#xff0c;或是桌面截屏或USB摄像头的实时图片。解码文件后&#xff0c;还将每帧图片转换为OpenCV的Mat格式以供后续使用。 文章目录 1 基于ffmpeg的媒体文件解…

Java之旅(五)

运算符 算术运算符 加法&#xff08;&#xff09;减法&#xff08;-&#xff09;乘法&#xff08;*&#xff09;除法&#xff08;/&#xff09;取余&#xff08;%&#xff09;一元运算符 自增运算符&#xff08;&#xff09;自减运算符&#xff08;--&#xff09;变量前就先运…

基于Yarn搭建Flink

基于Yarn搭建Flink 1. 概述 1.1 Yarn 简介 Apache Hadoop YARN是一个资源提供程序&#xff0c;受到许多数据处理框架的欢迎。Flink服务被提交给 YARN 的 ResourceManager&#xff0c;后者再由 YARN NodeManager 管理的机器上生成容器。Flink 将其 JobManager 和 TaskManager…

Apache DolphinScheduler——开源大数据调度器神器(国人之光)

本文已参与「新人创作礼」活动&#xff0c;一起开启掘金创作之路。 1. 简 介 Apache DolphinScheduler(海豚调度),国人之光&#xff0c;是许多国人雷锋开源在Apache的顶级项目&#xff0c;主要功能就是负责任务的调度处理。 1.1 概 念 Apache DolphinScheduler是一个分布式去…

CentOS6 通过shell脚本的离线安装MySQL5.7.40(rpm)

说明: 在项目的实施过程中,多次遇到安装MySQL的工作,尤其在内网环境下,无法使用在线yum源,只能使用源码或采用rpm离线安装的方式进行安装,在安装过程中会遇到各种各样的问题,小编特地就rpm离线安装方式进行了整理及验证,并通过shell脚本的方式实现一键安装。使用此脚本…