当前位置:首页 > 编程笔记 > 正文
已解决

【算法|滑动窗口No.4】leetcode 485.最大连续 1 的个数 487.最大连续 1 的个数 II 1004. 最大连续1的个数 III

来自网友在路上 144844提问 提问时间:2023-11-05 01:44:59阅读次数: 44

最佳答案 问答题库448位专家为你答疑解惑

个人主页:兜里有颗棉花糖
欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创
收录于专栏【手撕算法系列专栏】【LeetCode】
🍔本专栏旨在提高自己算法能力的同时,记录一下自己的学习过程,希望对大家有所帮助
🍓希望我们一起努力、成长,共同进步。
在这里插入图片描述

目录

  • 一、485.最大连续 1 的个数
    • 题目描述
    • 解题代码
  • 二、487.最大连续 1 的个数 II
    • 题目描述
    • 解题代码
  • 三、1004. 最大连续1的个数 III
    • 题目描述
    • 解题代码

一、485.最大连续 1 的个数

原题链接:点击直接跳转到该题目

题目描述

给定一个二进制数组 nums , 计算其中最大连续 1 的个数。

示例1:

输入:nums = [1,1,0,1,1,1]
输出:3
解释:开头的两位和最后的三位都是连续 1 ,所以最大连续 1 的个数是 3.

示例2:

输入:nums = [1,0,1,1,0,1]
输出:2

提示:

  • 1 <= nums.length <= 1 0 5 10^{5} 105
  • nums[i] 不是 0 就是 1

解题代码

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

二、487.最大连续 1 的个数 II

原题链接(会员题目):点击直接跳转到该题目

题目描述

在这里插入图片描述

在这里插入图片描述
提示:

  • 1 <= nums.length <= 1 0 5 10^{5} 105
  • nums[i] 不是 0 就是 1

解题代码

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

三、1004. 最大连续1的个数 III

原题链接:点击直接跳转到该题目

题目描述

给定一个二进制数组 nums 和一个整数 k,如果可以翻转最多 k0 ,则返回 数组中连续 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。

解题代码

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

hh~最后就顺利通过啦!!!

查看全文

99%的人还看了

猜你感兴趣

版权申明

本文"【算法|滑动窗口No.4】leetcode 485.最大连续 1 的个数 487.最大连续 1 的个数 II 1004. 最大连续1的个数 III":http://eshow365.cn/6-32316-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!