当前位置: 首页 > news >正文

2025年- H109-Lc1493. 删掉一个元素以后全为 1 的最长子数组(双指针)--Java版

1.题目描述

在这里插入图片描述

2.思路

在这里插入图片描述

(1)不定长滑动窗口:
不定长滑动窗口主要分为三类:求最长子数组,求最短子数组,求子数组个数。
注:滑动窗口相当于在维护一个队列。右指针的移动可以视作入队,左指针的移动可以视作出队。
(2)删除后,子数组只有 1,也就是没有 0。那么删除之前呢?至多有一个 0。
(3)cnt = cnt - (1 - nums[left]);
如果将要移出窗口的 nums[left] 是 1,那么 1 - nums[left] 的结果是 0。cnt 不变(因为移出一个1对0的个数没有影响)。

如果将要移出窗口的 nums[left] 是 0,那么 1 - nums[left] 的结果是 1。cnt 减少 1(因为我们把一个0移出了窗口)。

所以,这行代码的作用是:当窗口移出一个 0 时,cnt 减一。

(4)当右指针 right 移动,元素进入窗口时:

执行 cnt = cnt + 1 - nums[right];

如果 nums[right] 是 1,那么 1 - nums[right] 的结果是 0。cnt 不变。

如果 nums[right] 是 0,那么 1 - nums[right] 的结果是 1。cnt 增加 1。

所以,这行代码的作用是:当窗口滑入一个 0 时,cnt 加一。

3.代码实现

class Solution {public int longestSubarray(int[] nums) {//1.左右指针都从0开始移动int left=0;int cnt=0;//存0的个数int res=0;for(int right=0;right<nums.length;right++){ //1-nums[right]:从左往右遍历记录0的个数。因为遇到1的时候:1-1=0;遇到0的时候为1-0=1;实现计数功能//1.右指针进入窗口。当窗口滑入一个 0 时,cnt 加一。cnt=cnt+1-nums[right];while(cnt>1)//如果0的个数大于1,退出循环{//窗口末尾元素(最左边的元素)出队,nums[left]离开窗口//当窗口移出一个 0 时,cnt 减一。cnt=cnt-(1-nums[left]);left++;}// 3. 更新答案,注意不是 right-left+1,因为我们要删掉一个数res=Math.max(res,right-left);} return res;}
}
http://www.dtcms.com/a/363402.html

相关文章:

  • 软件测试小结(1)
  • 【完整源码+数据集+部署教程】粘土石实例分割系统源码和数据集:改进yolo11-LVMB
  • MVP架构深层剖析-从六大设计原则的实现角度到用依赖注入深度解耦
  • 安全芯片助力游戏设备防抄板
  • 「Windows自动化之王:PowerShell极简美学」​
  • 微信小程序 navigateTo 栈超过多层后会失效
  • 【开题答辩全过程】以 基于微信小程序的体育场馆预约管理系统为例,包含答辩的问题和答案
  • 【Git】一文详解Git Rebase和Merge区别 看完必会
  • 整体认识K8s之PriorityClass优先级调度/HPA自动扩缩容机制
  • golang 依赖管理
  • 网络技术名词 CDN NAT GA DNS
  • 深度学习篇---Pytorch常用优化器
  • 力扣72:编辑距离
  • 用 PyTorch 实现食品图像分类:从数据预处理到模型训练与预测
  • mayfly-go:web 版 linux、数据库等管理平台
  • 码农必备!本地调试神器act,GitHub Actions最佳拍档
  • C++ 条件变量,互斥锁
  • vue飞自在酒店管理系统(代码+数据库+LW)
  • 第十七讲:编译链接与函数栈帧
  • Python图像处理模块介绍
  • Linux 文本处理四剑客:cut, sort, uniq, tr
  • springboot redisson 分布式锁切面入门与实战
  • HTML应用指南:利用POST请求获取全国便利蜂门店位置信息
  • 面试tips--JVM(4)--Minor GC Major GC Full GC
  • 从理念到实践:三层解耦架构与“无系统”论
  • 59.螺旋矩阵II
  • 科研界“外挂”诞生了:科学多模态模型Intern-S1-mini开源
  • linux开发板(rk3568,树莓派)自动连接保存好的WIFI
  • 百度网盘基于Flink的实时计算实践
  • SpringMVC —— Spring集成web环境和SpringMVC快速入门