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

Leetcode每日刷题之1004.最大连续1的个数|||(C++)

1.题目解析

本题的目的是找出能最多翻转k个0的情况下最长连续的1的个数,并且这是一个二进制数组,只存在0和1,翻转0就是将0变为1

 

2.算法原理

首先我们想到的一定是暴力枚举,即依次列举出在最多翻转k个0的情况下所有连续1的子数组的长度,求出最大值,这样的时间复杂度会很高,所以我们可以换一个思路,即找出子数组满足其中的0的个数小于k,此时我们直接求该子数组的长度就代表了连续1的个数,此时只要求出一个子数组其中含有0的个数zero<k且是满足该条件的最长子数组即可

这里我们用到的是"滑动窗口"来解决问题,即固定一个指针left后移动right指针并统计right指针遇到0的个数,此时就是入窗口的操作,然后当zero>k时就需要移动left指针直到zero<=k,这一步是出窗口的操作,然后更新数据即最大子数组长度即可

 

3.代码展示

class Solution {
public:int longestOnes(vector<int>& nums, int k) {int len = 0;int n = nums.size();for(int left = 0,right = 0,zero = 0;right < n;right++){if(nums[right] == 0){zero++;}while(zero > k){if(nums[left++] == 0){zero--;}}len = max(len,right - left + 1);}return len;}
};

 


http://www.mrgr.cn/news/3852.html

相关文章:

  • 初级python代码编程学习----简单的图形化闹钟小程序
  • centos7.9离线安装kubernetes(k8s)1.28版本
  • 【论文阅读33】Deep learning optoacoustic tomography with sparse data
  • 78.内存对齐
  • Java二十三种设计模式-解释器模式(23/23)
  • 深入理解命令模式:设计模式中的行为型模式解析
  • 揭秘面试必备:高频算法与面试题全面解析
  • turtle画图知识
  • “职场加速器:高频面试题与算法精讲”
  • 【C语言小项目】五子棋游戏
  • vue3中实现给pdf加盖公章(手动拖拽公章确认位置)
  • 基于STM32F103的FreeRTOS系列(十一)·信号量·二值信号量与计数信号量详细使用以及移植教程
  • 使用Go env命令设置Go的环境
  • 招生简章哪里可以免费上传
  • CF1929F
  • 基于协同过滤算法的体育商品推荐系统_t81xg
  • 二叉树剪枝
  • 2-72 基于matlab的平稳小波变换进行多聚焦图像融合
  • 【Spring进阶】掌握Spring框架核心注解:从基础到实战应用(Spring深度解析)
  • Linux rocky 9.2 安装mysql-8.0.39-linux-glibc2.28-x86_64.tar.xz