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

news/2024/11/15 1:59:08/

文章目录

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

一【题目类别】

  • 滑动窗口

二【题目难度】

  • 中等

三【题目编号】

  • 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 = 0res = 0while right < size:if nums[right] == 0:zero_count += 1while zero_count > 1:if nums[left] == 0:zero_count -= 1left += 1res = max(res,right - left + 1)right += 1return 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.ppmy.cn/news/113598.html

相关文章

卓有成效的管理者读后感及金句

感悟和金句章节金句&#xff1a;管理者的工作必须是卓有成效&#xff0c;卓有成效是可以学会的。 感悟&#xff1a;世界上最大的敌人就是自己&#xff0c;所以说管理好自己你就一定会有自我满足感&#xff0c;也会把你的人生越过越好。第一章金句&#xff1a;“认识你的时间”是…

【笔记】微机原理及接口技术2 -- 存储器与IO接口技术

目录 存储器存储器分类存储器常用性能指标半导体存储器随机存取存储器 RAM动态随机存储器 DRAM三态缓冲器只读存储器 ROM存储器与 CPU 链接存储空间扩展方式内存寻址方法&#xff08;片选方式&#xff09;存储器小节思考题 I/O 接口技术IO 接口概述IO 端口编址寻址输入输出控制…

电脑总是要重启才能自动连接wifi的解决办法

1、首先打开设备管理器&#xff0c;点击“网络适配器”&#xff0c;点击含有LAN的。 2、接着点击‘电源管理’&#xff0c;取消勾选。 3、上面一步做好后&#xff0c;我们去打开控制面板&#xff0c;点击‘网络和Internet’。 4、接着打开‘网络和共享中心’ 5、点击‘更改适配…

神舟电脑LOT码查询(SN码)

老电脑了&#xff0c;前几天需要查询电脑的序列号&#xff0c;是硬件的&#xff0c;不是操作系统的&#xff0c;电脑屁股后面的标签因为时间太久了所以脱落丢掉了&#xff0c;网上的方法也行不通。 其它牌子的电脑一般叫sn码&#xff0c;全称serial number&#xff0c;但神舟电…

用电脑无线投屏到电视屏幕的连接方法

步骤一&#xff1a; 先用遥控器打开电视上的连接指南——>PC——>屏幕共享&#xff08;无线&#xff09;——>确认&#xff1b; 电视机名称&#xff1b; 步骤二&#xff1a; 1、在电脑上选择&#xff1a;“连接”或者"投放”——>确认&#xff1b; 2、在显示…

电脑更改桌面图标与图标文字的大小

随着电脑屏幕的分辨率的不同&#xff0c;电脑桌面的图标也会跟着放大或缩小&#xff0c;在2k的屏幕上和1080p的屏幕上桌面图标显示的效果是不一样的&#xff0c;那么怎样设置为我们看着比较舒适的图标与字体大小呢&#xff1f; 一、设置放大比 1.1、桌面右键属性》屏幕分辨率…

查看电脑是否支持蓝牙和wifi

先上结论&#xff1a; 笔记本&#xff1a;一般都有蓝牙和WiFi模块 台式机&#xff1a;一般都没有蓝牙和WiFi模块&#xff08;有些主板会自带wifi和蓝牙功能&#xff0c;即集成了wifi模块和无线网卡&#xff09; 注&#xff1a;WiFi模块也叫做无线网卡 蓝牙适配器->解…

电脑声音无法找到输出设备咋整啊?

前言 用CSDN好久哒&#xff0c;我这破电脑从买到现在经历重重波折&#xff0c;重装系统&#xff0c;office下载出问题以及下载专业软件安装出错等等&#xff0c;经过广大网友朋友们的帮助&#xff0c;都一一解决&#xff0c;每次去店里修也是一笔额外的支出&#xff0c;贫穷是…