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

【滑动窗口-1004. 最大连续1的个数 III】

题目描述

1004. 最大连续1的个数 III
给定一个二进制数组 nums 和一个整数 k,如果可以翻转最多 k 个 0 ,则返回 数组中连续 1 的最大个数 。

在这里插入图片描述

分析

首先将1的下标存到列表lst中,我们想要维护一个区间,区间的左端点为01串中的一个1,右端点也是01串中的一个1,即两个端点值为lst中的元素。

合法的区间为:这两个端点之间的0的个数小于等于k,那么当前合法区间所构成的连续1的个数为 :区间中1的个数+k

当区间不合法时,被动移动左端点到下一个1的位置,区间合法时右端点移到到下一个1的位置

代码

def ans(s: list[int], k: int) -> int:  n = len(s)  lst = [i for i in range(len(s)) if s[i] == 1]# 1的个数为0if len(lst) == 0:return min(n,k)# 0的个数小于等于kif n-len(lst) <= k:return nl = 0max_len = 0for r in range(len(lst)):# 要保证合法区间s[l],s[r] 之间0的个数小于等于kwhile (lst[r] - lst[l]) - (r - l) > k:l += 1# 1的个数+kmax_len = max(max_len, r-l+1+k)return max_len

扩展

这份代码同样使用当01串变为有颜色的珠子:

问题描述:有长度为n的带颜色的珠子,有m 种颜色,可以随机将k个珠子变成任意颜色,问变完后,连续相同颜色的珠子的长度

分析:将每种颜色的下标分别存到相应的字典中,对于每个字典就转化成了上面的01串问题,因为要遍历的是字典中的每个元素(对应于s中每种颜色的下标),所以将每种颜色的字典中的元素都遍历完,总共遍历n次,故均摊复杂度依然是O(n)

# 对有颜色的01串操作k次(改变任意字符的颜色)后,最长连续颜色的子串长度,m种颜色# 多跳滑动窗口,保证窗口中操作次数小于等于Kdef ans(self, s: list[int], k: int) -> int:    n = len(s)from collections import defaultdictdic = defaultdict(list)for i in range(n):dic[s[i]].append(i)  max_len = 0  for key, lst in dic.items(): # 0的个数小于等于kif n-len(lst) <= k:return nl = 0for r in range(len(lst)):while (s[r]-s[l]) -(r-l) > k :l += 1max_len = max(max_len, r-1+1 +k )return max_len

太简洁了!感谢四老师!

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 基于Java+SpringBoot+Vue+MySQL的西安旅游管理系统网站
  • Windows--linux共享文件夹
  • SAP B1 学习笔记 - 易混淆字段名(持续更新中)
  • matlab数据批量保存为excel,文件名,行和列的名称设置
  • Redis面对数据量庞大处理方法
  • 基于SpringBoot的社团管理系统
  • Java实现邮箱发送功能详细步骤及注意事项?
  • 介绍 Apache Spark 的基本概念和在大数据分析中的应用。
  • Java设计模式—面向对象设计原则(二) --------> 里氏代换原则 LSP (完整详解,附有代码+案列)
  • leetcode-647. 回文子串
  • Linux相关概念和重要知识点(2)(用户、文件和目录、inode、权限)
  • 制证书、制电子印章、签章 -- 演示程序说明
  • 关系型数据库 - MySQL I
  • 短剧市场快速发展,短剧APP成为了新的商业机遇
  • 价值流案例研究:实战经验与成功实践的深度解析
  • 9月CHINA-PUB-OPENDAY技术沙龙——IPHONE
  • [LeetCode] Wiggle Sort
  • eclipse(luna)创建web工程
  • ECMAScript入门(七)--Module语法
  • Flex布局到底解决了什么问题
  • JavaScript-Array类型
  • log4j2输出到kafka
  • python 装饰器(一)
  • RedisSerializer之JdkSerializationRedisSerializer分析
  • Redis提升并发能力 | 从0开始构建SpringCloud微服务(2)
  • Selenium实战教程系列(二)---元素定位
  • SQLServer之创建数据库快照
  • 对象管理器(defineProperty)学习笔记
  • 老板让我十分钟上手nx-admin
  • FaaS 的简单实践
  • Java性能优化之JVM GC(垃圾回收机制)
  • ​iOS实时查看App运行日志
  • ​TypeScript都不会用,也敢说会前端?
  • ​经​纬​恒​润​二​面​​三​七​互​娱​一​面​​元​象​二​面​
  • ​业务双活的数据切换思路设计(下)
  • # Swust 12th acm 邀请赛# [ K ] 三角形判定 [题解]
  • ## 1.3.Git命令
  • ######## golang各章节终篇索引 ########
  • #systemverilog# 之 event region 和 timeslot 仿真调度(十)高层次视角看仿真调度事件的发生
  • (2/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (2021|NIPS,扩散,无条件分数估计,条件分数估计)无分类器引导扩散
  • (C#)一个最简单的链表类
  • (C语言)输入一个序列,判断是否为奇偶交叉数
  • (Matlab)遗传算法优化的BP神经网络实现回归预测
  • (Ruby)Ubuntu12.04安装Rails环境
  • (附源码)springboot金融新闻信息服务系统 毕业设计651450
  • (附源码)SSM环卫人员管理平台 计算机毕设36412
  • (学习日记)2024.01.19
  • (学习日记)2024.04.10:UCOSIII第三十八节:事件实验
  • (一)Java算法:二分查找
  • (原創) 未来三学期想要修的课 (日記)
  • (源码分析)springsecurity认证授权
  • **PHP二维数组遍历时同时赋值
  • **登录+JWT+异常处理+拦截器+ThreadLocal-开发思想与代码实现**
  • .axf 转化 .bin文件 的方法