LeetCode算法题(Go语言实现)_16
题目
给定一个二进制数组 nums 和一个整数 k,假设最多可以翻转 k 个 0 ,则返回执行操作后 数组中连续 1 的最大个数 。
一、代码实现
func longestOnes(nums []int, k int) int {left, zeroCnt, maxLen := 0, 0, 0for right := 0; right < len(nums); right++ {if nums[right] == 0 {zeroCnt++}// 窗口收缩条件for zeroCnt > k {if nums[left] == 0 {zeroCnt--}left++}// 更新最大窗口长度maxLen = max(maxLen, right - left + 1)}return maxLen
}func max(a, b int) int {if a > b { return a }return b
}
二、算法分析
1. 核心思路
- 滑动窗口机制:维护一个允许最多包含
k个 0 的窗口,通过动态调整左右边界寻找最大连续 1 的区间 - 贪心策略:当窗口内 0 的数量超过
k时,左边界右移直到满足条件,确保窗口始终包含有效解
2. 关键步骤
- 初始化窗口:左边界
left=0,统计窗口内 0 的数量zeroCnt - 扩展右边界:遍历数组元素,遇到 0 时增加计数
- 收缩条件:当
zeroCnt > k时,左移左边界并更新计数 - 极值记录:每次循环记录窗口最大长度
3. 复杂度分析
| 指标 | 值 | 说明 |
|---|---|---|
| 时间复杂度 | O(n) | 每个元素最多被访问两次(左右指针各一次) |
| 空间复杂度 | O(1) | 仅需存储指针和计数器变量 |
三、图解示例

四、边界条件与扩展
1. 特殊场景处理
- 全1数组:
nums = [1,1,1], k=0→ 直接返回数组长度 - k=0情况:等价于寻找最长连续1的子数组
- 超大k值:当
k ≥ 数组0的总数时返回数组长度
2. 多语言实现对比
| 语言 | 实现要点 | 性能优化技巧 |
|---|---|---|
| Python | 使用collections.deque记录0的位置 | 预计算0的索引数组加速窗口调整 |
| Java | ArrayDeque存储0的索引,窗口调整时直接跳转到首个无效位置后 | 位运算优化0计数逻辑 |
| C++ | 双指针配合zero_count变量,无需额外存储结构 | 循环展开优化边界判断 |
3. 算法对比
| 方法 | 优点 | 缺点 |
|---|---|---|
| 滑动窗口法 | 时间复杂度最优,空间效率高 | 需处理指针同步逻辑 |
| 前缀和+二分 | 支持随机查询 | 空间复杂度O(n) |
| 暴力枚举 | 实现简单 | 时间复杂度O(n²) |
五、总结与拓展
1. 核心创新点
- 窗口动态调整:通过
zeroCnt计数器的状态机式管理,实现线性时间复杂度 - 无效位置跳跃:当窗口收缩时,左指针可直接跳转到首个无效0的后一位,减少冗余计算
2. 数学证明
设数组长度为 n,窗口左右指针移动总距离为 2n,算法时间复杂度严格为 O(n)。通过归纳法可证:每次窗口扩展必然覆盖当前最优解的可能性,收缩操作确保不遗漏更优解。
3. 应用场景扩展
- 网络质量监测:统计允许丢包情况下的最大连续正常信号段
- DNA序列分析:查找允许突变次数内的最长保守序列
- 用户行为分析:检测连续活跃天数(允许短暂中断)
相关文章:
LeetCode算法题(Go语言实现)_16
题目 给定一个二进制数组 nums 和一个整数 k,假设最多可以翻转 k 个 0 ,则返回执行操作后 数组中连续 1 的最大个数 。 一、代码实现 func longestOnes(nums []int, k int) int {left, zeroCnt, maxLen : 0, 0, 0for right : 0; right < len(nums); …...
CORDIC算法:三角函数的硬件加速革命——从数学原理到FPGA实现的超高效计算方案
计算机该如何求解三角函数?或许你的第一印象是采用泰勒展开,或者采用多项式进行逼近。对于前者,来回的迭代计算开销成本很大;对于后者,多项式式逼近在较窄的范围內比较接近,超过一定范围后,就变…...
JVM 面经
1、什么是 JVM? JVM 就是 Java 虚拟机,它是 Java 实现跨平台的基石。程序运行之前,需要先通过编译器将 Java 源代码文件编译成 Java 字节码文件;程序运行时,JVM 会对字节码文件进行逐行解释,翻译成机器码指令&#x…...
SEO(搜索引擎优化)详解
SEO(搜索引擎优化)详解 SEO是Search Engine Optimization的缩写,中文称为"搜索引擎优化"。它是指通过一系列技术和方法,提高网站在搜索引擎自然(非付费)搜索结果中的排名,从而获得更…...
Ubuntu平台下安装Node相关环境
说明:在进行VUE、TS等开发需要用到NodeJS相关环境,不同的项目有时候需要不同的Node版本支撑。本文将详细讲解NVM、Node、Yarn、PM2等环境安装的实施步骤。 测试服务器环境:22.04 LTS。 1. NVM 定义:Node Version Manager&#x…...
deepseek大模型一体机与deepseek的关系
deepseek大模型一体机与deepseek的关系 一、deepseek大模型一体机是什么 DeepSeek大模型一体机是由深度求索(DeepSeek)公司推出的软硬件一体化AI解决方案,旨在为企业提供高效、便捷的大模型部署和应用能力。 二、deepseek大模型一体机与de…...
Windows Server 2025 使用 IIS 搭建 ASP.NET 3.5 网站
开启远程桌面 参考文章Windows server开启远程桌面教程打开服务管理器。ECS 配置安全组,开启 3389Telnet 验证网络联通性 telnet x.x.x.x 338安装 Windows App,登录验证 安装 ASP.NET 3.5 1.参考文章Windows Server 2012安装 .NET Framework 3.5和 Wi…...
高等数学-第七版-上册 选做记录 习题7-2
1. 2....
基于Promise链式调用的多层级请求性能优化
代码优化-循环嵌套关联请求 1. 背景 在实际开发中,我们经常会遇到需要嵌套关联请求的场景,比如: 获取项目列表获取项目详情获取项目进度 2. 问题 在这种场景下,我们可能会遇到以下问题: 串行请求瀑布流ÿ…...
【强化学习】基于深度强化学习的微能源网能量管理与优化策略研究【Python】
目录 主要内容 程序要点 2.1 微能源网系统组成 2.2 强化学习及Q学习算法 部分代码 运行结果 下载链接 主要内容 该程序借助深度 Q 网络(DQN),学习预测负荷、风 / 光可再生能源功率输出及分时电价等环境信息,运用…...
楼宇自控借何种技术,驱动建筑迈向高效绿色
在全球积极倡导可持续发展的大背景下,建筑行业作为能源消耗和碳排放的大户,实现高效绿色发展迫在眉睫。楼宇自控系统凭借其先进的技术手段,成为推动建筑向高效绿色转型的关键力量。那么,楼宇自控究竟借助哪些技术,让建…...
监控易一体化运维:监控易机房管理,打造高效智能机房
在数字化浪潮中,企业对数据中心和机房的依赖程度与日俱增,机房的稳定运行成为业务持续开展的关键支撑。信息化的变迁,见证了机房管理从传统模式向智能化、精细化转变的过程。今天,就为大家深度剖析监控易在机房管理方面的卓越表现…...
简记_FPGA 硬件最小系统设计
一、FPGA板级设计的五要素 1.1、电源电路 核心电压:一般为固定值 IO电压:FPGA的IO分为多个bank,同一个bank的不同IO引脚电压相同,不同bank的电压可以不同 辅助电压:除了核心电压和IO电压,FPGA工作所需的…...
1.1-站点差异\源码差异\数据存储差异\MVC模型
1、有哪几种站点 分主站、分站、端口站、子站、目录站 2、有哪几种源码语言框架差异 开源-如Zblog 闭源-内部开发 加密-如通达OA 3、网站数据存储有哪几个方式 本地数据库:本地服务器搭建 分离数据库:另外的服务器搭建 云数据库:RDS…...
PHP安装HTML转图片的扩展GD库的使用
修改你的PHP.ini文件,找到以下位置 ;extensionphp_gd2.dll 把前面的;去掉…...
清华大学第10讲:迈向未来的AI教学实验396页PPT 探索未来教育的无限可能|附PPT下载方法
导 读INTRODUCTION 今天跟大家分享的是清华大学新闻与传播学院、人工智能学院双聘教授沈阳教授团队出品的《迈向未来的AI教学实验》课程作业集,随着人工智能技术的飞速发展,教育领域也迎来了前所未有的变革。该报告为沈阳教授与学生们在“迈向未来的AI教…...
《白帽子讲 Web 安全》之服务端请求伪造(SSRF)深度剖析:从攻击到防御
引言 在当今复杂的网络环境中,Web 应用安全犹如一座时刻需要精心守护的堡垒。随着技术的不断演进,各类安全威胁层出不穷,其中服务端请求伪造(SSRF)正逐渐成为令开发者与安全从业者头疼的一大难题。吴翰清在《白帽子讲…...
豪越消防一体化安全管控平台:消防管理智能化
在社会快速发展、城市建设日益复杂的今天,消防安全始终是保障人民生命财产安全、维护社会稳定的重要基石。传统消防管理模式在应对当下复杂多变的消防安全需求时,逐渐暴露出诸多局限性,而豪越消防一体化平台的出现,为消防管理领域…...
VMware虚拟机 ubuntu22.04无法与共享粘贴板和拖拽文件的解决方案
VMware虚拟机 ubuntu22.04无法与共享粘贴板和拖拉文件的解决方案 卸载VMware tools安装open-vm-tools还无法拖拽文件 卸载VMware tools 确保卸载完vmware-tools # 进入vmware-tools安装目录/bin sudo vmware-uninstall-tools.pl sudo rm -rf /usr/lib/vmware-tools sudo apt-…...
瑞芯微RK356X主板复用接口配置方法,触觉智能嵌入式方案商
本文介绍瑞芯微RK356X系列复用接口配置的方法,基于触觉智能RK3562开发板演示,搭载4核A53处理器,主频高达2.0GHz;内置独立1Tops算力NPU,可应用于物联网网关、平板电脑、智能家居、教育电子、工业显示与控制等行业。 复…...
企业签名app部分用户能安装,部分用户不能安装
企业签名的app有的用户能安装,有的用户安装失败。 最近在做企业签名后,有客户反馈,客户的手机能安装,但是别人的手机安装不了。 一般有3种情况: 1、首先确保配置文件info.plist里面都添加了SSL证书(HTTPS)。 2、开发人…...
NX二次开发刻字功能——预览功能
这个预览功能其实在NX软件中很常见,有利于建模者确定刻字的位置,这个功能早在唐康林老师的超级长方体教程中出现过。我只是学以致用。把该功能集成刻字中。 在勾选预览的同时,如果点击放大镜也就是显示预览结果,要刻字的对象透明度数值为70,同时预览结果文字会变成撤销,如…...
前端知识点---window.location.assign() 和 window.location.href 的区别(javascript)
window.location.assign() 和 window.location.href 的主要区别: 读取和设置 window.location.href:既可以读取当前 URL,也可以通过赋值更改 URL。 window.location.assign():只能用于跳转到新的 URL,不能读取当前地…...
容器主机CPU使用率突增问题一则
关键词 LINUX、文件系统crontab 、mlocate根目录使用率 There are many things that can not be broken! 如果觉得本文对你有帮助,欢迎点赞、收藏、评论! 一、问题现象 业务一台容器服务器,近期经常收到cpu不定期抖动告警&#x…...
华为hcia——Datacom实验指南——配置IPv4静态路由,默认路由和浮动静态路由
什么是IPv4 IPv4静态路由,是手动配置的,不会随着网络拓扑的变化而变化,所配置的路由信息也不会在网络中传播,所以它主要运用在小型网络或者作为动态路由的补充。 IPv4的配置 配置的命令很简单 IP route-static (目…...
解释时间复杂度 O() 表示法,如何评估算法效率?
时间复杂度与前端开发实战指南 作为前端工程师,理解时间复杂度能帮助我们写出高性能代码。以下是结合前端场景的深度解析: 一、时间复杂度的本质 时间复杂度用大O符号表示算法执行时间随数据规模增长的变化趋势。关注的是最坏情况下增长的量级&…...
【Apache Hive】
一、Hive简介 官网:https://hive.apache.org 1、Hive是什么? Apache Hive 是一款建立在Hadoop之上的开源数据仓库系统,可以将存储在Hadoop文件中的结构化、半结构化数据文件映射为一张数据库表,基于表提供了一种类似SQL的查询模型…...
SQL Server安装进度卡在 57%:Windows Update 服务异常
问题现象: 安装 SQL Server 2022 时进度停滞在 57%,日志报错 Error code 0x80070422,提示 “Windows Update 服务未运行”。 快速诊断 检查服务状态: # 查看 Windows Update 服务状态 Get-Service -Name wuauserv | Select-Object…...
YOLO历代发展 图像增强方式 架构
YOLO1 YOLOV5 数据增强 mosaic 仿射变换(Affine)、透视变换(Perspective) 网络搭建...
DexGrasp Anything:具有物理-觉察的普遍机器人灵巧抓取
25年3月来自上海科技大学的论文“DexGrasp Anything: Towards Universal Robotic Dexterous Grasping with Physics Awareness”。 能够抓取任何物体的灵巧手,对于通用具身智能机器人的开发至关重要。然而,由于灵巧手的自由度高,物体种类繁多…...
