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

【滑动窗口】最⼤连续 1 的个数 III(medium)

⼤连续 1 的个数 III(medium)

  • 题⽬描述:
  • 解法(滑动窗⼝):
    • 算法思路:
    • 算法流程:
  • C++ 算法代码:
  • Java 算法代码:

题⽬链接:1004. 最⼤连续 1 的个数 III

题⽬描述:

给定⼀个⼆进制数组 nums 和⼀个整数 k ,如果可以翻转最多 k 个 0 ,则返回 数组中连续 1的最⼤个数 。
⽰例 1
输⼊: nums = [1,1,1,0,0,0,1,1,1,1,0], K = 2
输出: 6
解释
[1,1,1,0,0,1 ,1,1,1,1,1]
红⾊数字从 0 翻转到 1 ,最⻓的⼦数组⻓度为 6 。
⽰例 2
输⼊: nums = [0,0,1,1,0,0,1,1,1,0,1,1,0,0,0,1,1,1,1], K = 3
输出: 10
解释
[0,0,1,1, 1,1 ,1,1,1,1,1,1,0,0,0,1,1,1,1]
红⾊数字从 0 翻转到 1 ,最⻓的⼦数组⻓度为 10 。

解法(滑动窗⼝):

算法思路:

不要去想怎么翻转,不要把问题想的很复杂,这道题的结果⽆⾮就是⼀段连续的 1 中间塞了 k个 0 嘛。
因此,我们可以把问题转化成:求数组中⼀段最⻓的连续区间,要求这段区间内 0 的个数不超过 k 个。
既然是连续区间,可以考虑使⽤「滑动窗⼝」来解决问题。

算法流程:

  1. 初始化⼀个⼤⼩为 2 的数组就可以当做哈希表 hash 了;初始化⼀些变量 left = 0 ,
    right = 0 , ret = 0 ;
  2. 当 right ⼩于数组⼤⼩的时候,⼀直下列循环:
    i. 让当前元素进⼊窗⼝,顺便统计到哈希表中;
    ii. 检查 0 的个数是否超标:
    • 如果超标,依次让左侧元素滑出窗⼝,顺便更新哈希表的值,直到 0 的个数恢复正常;
    iii. 程序到这⾥,说明窗⼝内元素是符合要求的,更新结果;
    iv. right++ ,处理下⼀个元素;
  3. 循环结束后, ret 存的就是最终结果。

C++ 算法代码:

class Solution{
public:int longestOnes(vector<int>& nums, int k){int ret = 0;for(int left = 0, right = 0, zero = 0; right < nums.size(); right++){if(nums[right] == 0) zero++; // 进窗⼝while(zero > k) // 判断if(nums[left++] == 0) zero--; // 出窗⼝ret = max(ret, right - left + 1); // 更新结果}return ret;}
}

Java 算法代码:

class Solution{public int longestOnes(int[] nums, int k){int ret = 0;for(int left = 0, right = 0, zero = 0; right<nums.length;right++){if(nums[right] == 0) zero++; // 进窗⼝while(zero > k) // 判断if(nums[left++] == 0) zero--; // 出窗⼝ret = Math.max(ret, right - left + 1); // 更新结果}return ret;}
}

相关文章:

  • MLA(多头潜在注意力)原理概述
  • leetcode 2563. 统计公平数对的数目 中等
  • turtle库绘制进阶图形
  • 【Canvas与旗帜】标准英国米字旗
  • 深入解析进程与线程:区别、联系及Java实现
  • 【大模型框架】LLAMA-FACTORY使用总结
  • 【工控基础】工业相机设置中,增益和数字增益有什么区别?
  • 网络爬虫和前端相关知识
  • 数据结构——栈以及相应的操作
  • 健康养生:拥抱美好生活的基石
  • 9 C 语言变量详解:声明与定于、初始化与赋值、printf 输出与 scanf 输入、关键字、标识符命名规范
  • 嵌入式exfat-nofuse文件系统移植和使用
  • Java核心技术卷第三章
  • 5G基站设计难题:尺寸、重量、功耗和散热
  • Python Requests 库:从安装到精通
  • 【人工智能】Agent智能体关键技术分析
  • 基于SpringBoot的网上找律师管理系统
  • 支持中文对齐的命令行表格打印python库——tableprint
  • 什么是 Stream
  • 代码随想录背包问题完结
  • “五一”逃离城市计划:带上帐篷去大自然里充电
  • 迎接八方来客:全国多地“五一”假期党政机关大院停车场免费开放
  • 大型长读长RNA测序数据集发布,有助制定精准诊疗策略
  • 国有六大行一季度合计净赚超3444亿,不良贷款余额均上升
  • 复星医药换帅:陈玉卿接棒吴以芳任董事长,吴以芳改任复星国际执行总裁
  • 深入贯彻中央八项规定精神学习教育中央指导组派驻地方和单位名单公布