leetcode 1004. 最大连续1的个数 III(优质解法)

代码:

class Solution {public int longestOnes(int[] nums, int k) {int length=nums.length;int zero=0; //计数器,计数翻转 0 的个数int max=0;  //记录当前获得的最长子数组长度for(int left=0,right=0;right<length;right++){if(nums[right]==0){zero++;while (zero>k){if(nums[left]==0){zero--;}left++;}//zero<=k}//nums[right]==1max=Math.max(max,right-left+1);}return max;}
}

题解:

        首先,我们可以思考一下这个题的题意,题目要求找到数组中连续 1 的最大个数,由于需要连续的数据,说明需要我们找到的是连续 1 的 “子数组” ,而存在翻转 0 的机制,所以我们找到的子数组中最大可容纳 k 个 0 

        那么我们可以想到这个题的暴力解法,就是遍历获得所有的子数组,去除掉含 k 个 0 以上的子数组,在剩余的子数组中找到长度最长的子数组

        关于子数组以及子串的问题,我们很容易想到通过滑动窗口 - 双指针的方式解决

        我们通过示例 1 来进行分析:nums = [1,1,1,0,0,0,1,1,1,1,0], K = 2        

        将指针 L 和 R 指向 下标 0 的位置,L 和 R 指针之间的数据便是我们此时要讨论的子数组,首先,判断 R 指针指向的数据,数据为 1 ,那么此时我们不需要进行字符翻转,记录当前子数组的长度,让 R++ ,扩大我们讨论的子数组长度

1        1        1        0        0        0        1        1        1        1        0

R

        当 R 指针指向 1 ,我们只需要和上述条件一样,记录当前子数组的长度(当前长度与之前保存的长度进行比较,取较大的保存),让 R++ ,扩大我们讨论的子数组长度即可,一直扩大到 R 指针指向 0 

        此时我们讨论的子数组中出现 0 了,但题目有字符翻转的机制,所以我们可以将当前遇到的 0 翻转为 1,我们通过一个计数器 zero ,记录我们已经翻转的 0 的个数,此时 zero = 1 (不会有小可爱真的把源数据改为 1 把),只有 zero > k 时才代表我们已经不能进行翻转,将 0 翻转为 1 后,我们同样记录当前讨论的子数组的长度,再让 R++ ,继续扩大我们讨论的子数组长度 

1        1        1        0        0        0        1        1        1        1        0

                              R 

        当 R 指针指向当前位置时,计数器 zero 中的值为 3 ,已经大于 k 了,所以 R 指针此时指向的 0 ,我们不能进行翻转,这也代表以 L 指针为首位的子数组的最长长度我们已经获得了,此时我们可以让 L ++ ,讨论以下一个元素为首位的子数组的最长长度

1        1        1        0        0        0        1        1        1        1        0

                                                   R    

        现在出现一个问题,我们需要让 R 指针回到 L 指针的位置,从头开始讨论子数组的最长长度吗?答案是不需要,因为 R 指针到达当前位置,0 的个数才增多,子数组才不符合要求,这也代表,R 指针之前的数据都是符合要求的,即使我们让 R 指针回到 L 指针的位置从头开始讨论,R 指针也一定会移动到当前位置,所以没有必要让 R 指针回去,此时 zero =3 不符合要求,我们让 L ++ 直到符合要求为止

1        1        1        0        0        0        1        1        1        1        0

          L         

                                                   R

        当 L 指针移动到当前位置时,zero = 2 = k,符合要求,记录当前讨论的子数组的长度,就可以让 R ++,继续扩大我们讨论的子数组长度 

1        1        1        0        0        0        1        1        1        1        0

                                        L         

                                                   R

        接下来的操作就是循环,直到 R 指针移动到当前位置,R = nums.length,就结束循环,得到了最长的子数组长度

1        1        1        0        0        0        1        1        1        1        0

                                                   L      

                                                                                                            R

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

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

相关文章

IBM Qiskit量子机器学习速成(三)

Torch连接器和混合量子神经网络 本章内容介绍如何将QNN作为一般的Torch神经层嵌入Torch框架的经典神经网络。首先我们会学习如何嵌入EstimatorQNN&#xff0c;最后我们会使用这一技术实现手写数字的识别。 一般步骤 首先创建特征映射电路(feature map)和假设(ansatz)分别作为…

tomcat结构目录有哪些

Tomcat服务器结构目录包括以下内容&#xff1a; conf目录&#xff1a;存放Tomcat的配置信息&#xff0c;包括server.xml、context.xml、web.xml等核心配置文件。bin目录&#xff1a;存放Tomcat启动和关闭脚本&#xff0c;如catalina.sh、setenv.sh&#xff08;可选&#xff09…

深信服行为管理AC设置用户定时注销

PS&#xff1a;设置用户无流量注销及每天定时注销 AC版本&#xff1a;AC13.0.62.001 Build20221107 官方通告&#xff1a; 截止标准版本AC12.0.80和AC13.0.80&#xff0c;暂不支持指定周期时间内注销一次所有用户&#xff0c;仅支持每天的固定时间注销所有用户&#xff0c;每…

基于web的ssm网络在线考试系统源码和论文

摘要 随着Internet的发展&#xff0c;人们的日常生活已经离不开网络。未来人们的生活与工作将变得越来越数字化&#xff0c;网络化和电子化。网上管理&#xff0c;它将是直接管理网络在线考试系统的最新形式。本论文是以构建网络在线考试系统为目标&#xff0c;使用 java技术制…

软件测试方法之等价类测试

01 等价类划分法 1、应用场合 有数据输入的地方&#xff0c;可以使用等价类划分法。 从大量数据中挑选少量代表数据进行测试。 2、测试思想 穷举测试&#xff1a;把所有可能的数据全部测试一遍叫穷举测试。穷举测试是最全面的测试&#xff0c;但是在实际工作中不能采用&am…

vue3安装markdown-it

记录一个坑 vue ts使用markdown-it需要使用以下命令安装才行 npm install --save markdown-it vue/compiler-sfc来源https://juejin.cn/s/vue3%20markdown-it

Android View.inflate 和 LayoutInflater.from(this).inflate的区别

前言 两个都是布局加载器&#xff0c;而View.inflate是对 LayoutInflater.from(context).inflate的封装&#xff0c;功能相同&#xff0c;案例使用了dataBinding。 View.inflate(context, layoutResId, root) LayoutInflater.from(context).inflate(layoutResId, root, fals…

C++包管理利器CPM

C包管理利器CPM 一、介绍 CPM.cmake is a cross-platform CMake script that adds dependency management capabilities to CMake. It’s built as a thin wrapper around CMake’s FetchContent module that adds version control, caching, a simple API and more. CPM.cma…

CENTOS 7 添加黑名单禁止IP访问服务器

一、通过 firewall 添加单个黑名单 只需要把ip添加到 /etc/hosts.deny 文件即可&#xff0c;格式 sshd:$IP:deny vim /etc/hosts.deny# 禁止访问sshd:*.*.*.*:deny# 允许的访问sshd:.*.*.*:allowsshd:.*.*.*:allow 二、多次失败登录即封掉IP&#xff0c;防止暴力破解的脚本…

IBM 刚刚发布了首个 1000 量子比特的量子芯片

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

Python继承技法揭示,代码更具扩展性

更多Python学习内容&#xff1a;ipengtao.com 大家好&#xff0c;我是彭涛&#xff0c;今天为大家分享 Python继承技法揭示&#xff0c;代码更具扩展性&#xff0c;全文4000字&#xff0c;阅读大约11分钟。 继承是面向对象编程中的核心概念之一&#xff0c;它允许创建一个新的类…

spring 框架的 AOP

AOP依赖导入 <!-- AOP依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId></dependency>

Matlab 镜像变换(2D)

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 镜像变换是一个非常有趣的过程,它有着一个通用的套路(以2D为例):一个点围绕一个给定对称轴的镜像可以通过平移对称轴上一点,然后旋转它,使对称轴与x轴对齐,之后我们将旋转后的点的y坐标置为负,最后再将对称…

如何购买华为云服务器

华为云是华为推出的云计算服务平台&#xff0c;旨在为企业和个人提供全面的云端解决方案。它提供了包括计算、存储、数据库、人工智能、大数据、安全等多种云服务&#xff0c;覆盖了基础设施、平台和软件级别的需求。华为云致力于构建安全可信赖的云计算基础设施&#xff0c;以…

智慧校园:TSINGSEE青犀智能视频监控系统,AI助力优化校园管理

随着科技的飞速发展和信息化社会的到来&#xff0c;智慧校园已经成为教育领域的一种新型发展模式。智慧校园的需求和发展趋势日益显现&#xff0c;其建设已成为当今教育信息化发展的重要方向。 TSINGSEE青犀结合高可靠、高性能的云计算、人工智能、大数据、物联网等技术&#…

云原生周刊:K8s 的 YAML 技巧 | 2023.12.4

开源项目推荐 Helmfile Helmfile 是用于部署 Helm Chart 的声明性规范。其功能有&#xff1a; 保留图表值文件的目录并维护版本控制中的更改。将 CI/CD 应用于配置更改。定期同步以避免环境偏差。 Docketeer 一款 Docker 和 Kubernetes 开发人员工具&#xff0c;用于管理容…

【QT】Qt常用数值输入和显示控件

目录 1.QAbstractslider 1.1主要属性 2.QSlider 2.1专有属性 2.2 常用函数 3.QScrollBar 4.QProgressBar 5.QDial 6.QLCDNumber 7.上述控件应用示例 1.QAbstractslider 1.1主要属性 QSlider、QScrollBar和Qdial3个组件都从QAbstractSlider继承而来&#xff0c;有一些共有的属性…

三、DVP摄像头调试笔记(图片成像质量微调整,非ISP)

说明&#xff1a;当前调试仅仅用来测试和熟悉部分摄像头寄存器模式 一、图片成像方向控制&#xff0c;基本每个摄像头都会有上下左右翻转寄存器 正向图片 反向图片 二、设置成像数据成各种颜色&#xff0c;&#xff08;黑白/原彩/黄色等等&#xff09; 在寄存器书册描述中…

【面试经典150 | 二叉树】相同的树

文章目录 写在前面Tag题目来源题目解读解题思路方法一&#xff1a;递归方法二&#xff1a;迭代 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法&#xff0c;两到三天更新一篇文章&#xff0c;欢迎催更…… 专栏内容以分析题目为主&#xff0c;并附带一些对于本题…

UVa512追踪电子表格中的单元格题解

题目 有一个r行c列(1≤r,c≤50)的电子表格,行从上到下编号为1~r,列从左到右编号为 1~c。如图(a)所示,如果先删除第1、5行,然后删除第3,6,7,9列,结果如图(b)所示。 接下来在第2、3、5行前各插入一个空行,然后在第3列前插入一个空列, 会得到如图(e)的结果。 你的任务是模拟这样…