1.题目描述(简单题)

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

示例 1:

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

注意:

    • 输入的数组只包含 01
    • 输入数组的长度是正整数,且不超过 10,000。

2.思路与代码

2.1 解题思路

    • 首先,整个nums数组需要完整遍历一次,需要使用while或for循环;
    • 每段连续的1的长度,需要用一个变量cnt来记录;
    • 最后返回cnt中的最大值。

2.2 提交代码

class Solution {
public:
int findMaxConsecutiveOnes(vector<int>& nums) {
int cnt = ;
int max_cnt = ; /*---貌似--不支持auto关键字-----*/
//for(auto &c : nums){
//for(auto beg = nums.begin(),end = nums.end();beg != end;++beg){
//int c = *beg; int size = nums.size();//只调用一次size() for(int i = ; i<size;++i)
if(nums[i] == ) {
++cnt;
}
else{
max_cnt = max(max_cnt,cnt);
cnt = ;
}
return max(max_cnt,cnt);//针对测试用例[1],没有机会进入else分支执行max()比较
}
};

3.最大连续1的个数之二(中等题)

备注:因为这道题目前需要购买,我没有买,只是搜了一下这道扩展题,详情请点击附在末尾的原博文链接,我在这里只分析了一部分——加上附加条件“有一次将0翻转为1的机会”后,求此时最大连续1的个数。

3.1 主要题干描述

部分英文题干如下:(就是添加了附加条件——“有一次将0翻转为1的机会”

Given a binary array, find the maximum number of consecutive 1s in this array if you can flip at most one 0.

Example 1:

Input: [1,0,1,1,0]
Output: 4
Explanation: Flip the first zero will get the the maximum number of consecutive 1s.
After flipping, the maximum number of consecutive 1s is 4.

3.2 解题思路

一般地,基于基础题的扩展题的解法有两种情况:

  1. 大体思路和原基础题一致,只是某些局部的难点的处理要更加复杂些,因此,可以套用基础题的大体代码框架,重点思考需要突破的难点即可;
  2. 虽为基础题改编,但是问题发生了较大的变化,解法需要重新全盘规划。

对于本扩展题来说,因为题目本身的复杂度较低,还是比较接近第一种情况。具体解题思路:

  • (1)毫无疑问,整个nums数组仍需要完整遍历一次,使用范围for语句;
  • (2)需要对数字0的做进深理解:
    • a.每个数字0会把它前后的字符分为两段(紧邻的两段,要么为连续的1,要么为单独的0),这两段分别有四种可能:11111(两边都是1),1111(左边为0右边为1 或 左边为1右边为0),10011(两边都是0)
    • b.当选择一个0翻转为1时,它自己需要被计数,并且需要求它连接起的相邻两段的连续1的长度;
  • (3)仍然使用cnt来统计每一段连续的1的长度,但是当出现0时,为了使得cnt可以继续来统计下一段连续1的长度,使用cur变量来保存刚刚统计得到的cnt值,然后cnt=0,继续开始统计;
  • (4)合理放置++cnt的位置,不做if判断,可以把选中要翻转的0当作1统计入cnt中,用cur保存这个cnt值(左边段的1的长度,含翻转的0),然后cnt继续统计这个0右边的那个段中1的长度,比较 "cnt+cur"(0翻转为1后,合并起来的新的连续的1的段长) 与 max_cnt 的值,令max_cnt为两者中较大的。

3.3 完整自测代码

#include <iostream>
#include <vector>
#include <algorithm> using namespace std; class Solution {
public:
int findMaxConsecutiveOnes_2(vector<int>& nums) {
int cnt = ;
int cur = ;//保存遇到当前0之前的紧邻的上一段连续1的个数;当前0的前面为0,则cur为0
/*
1110 对于第1个0,cur = 3
11100 对于第2个0,cur = 0
*/
int max_cnt = ; for (auto &c : nums) {
++cnt;
if(c==) {
cur = cnt;
cnt = ;
}
max_cnt = max(max_cnt, cur + cnt);
}
return max_cnt;
} }; void main() {
vector<int> nums1 = { };
vector<int> nums2 = { ,,,,, };
vector<int> nums3 = { ,,,,, };
vector<int> nums4 = { };
vector<int> nums5 = { ,,,,,,,,,,,}; Solution test;
cout << "输入[1] 的结果为:" << test.findMaxConsecutiveOnes_2(nums1) << endl;
cout << "输入[1,1,0,1,1,1]的结果为:" << test.findMaxConsecutiveOnes_2(nums2) << endl;
cout << "输入[1,1,0,1,0,1]的结果为:" << test.findMaxConsecutiveOnes_2(nums3) << endl;
cout << "输入[0] 的结果为:" << test.findMaxConsecutiveOnes_2(nums4) << endl;
cout << "输入[ 1,1,0,1,1,1,0,1,1,1,1,1]的结果为:" << test.findMaxConsecutiveOnes_2(nums5) << endl; }

参考资料:

1.[LeetCode] Max Consecutive Ones II 最大连续1的个数之二

Leetcode 485. 最大连续1的个数的更多相关文章

  1. Java实现 LeetCode 485 最大连续1的个数

    485. 最大连续1的个数 给定一个二进制数组, 计算其中最大连续1的个数. 示例 1: 输入: [1,1,0,1,1,1] 输出: 3 解释: 开头的两位和最后的三位都是连续1,所以最大连续1的个数 ...

  2. LeetCode(485. 最大连续1的个数)

    问题描述 给定一个二进制数组, 计算其中最大连续1的个数. 示例 1: 输入: [1,1,0,1,1,1] 输出: 3 解释: 开头的两位和最后的三位都是连续1,所以最大连续1的个数是 3. 注意: ...

  3. LeetCode 485:连续最大1的个数 Max Consecutive Ones(python java)

    公众号:爱写bug 给定一个二进制数组, 计算其中最大连续1的个数. Given a binary array, find the maximum number of consecutive 1s i ...

  4. 【leetCode】485. 最大连续1的个数

    给定一个二进制数组, 计算其中最大连续1的个数. 示例 1: 输入: [1,1,0,1,1,1]输出: 3解释: 开头的两位和最后的三位都是连续1,所以最大连续1的个数是 3.注意: 输入的数组只包含 ...

  5. 力扣485. 最大连续1的个数-C语言实现-简单题

    题目 [题目传送门] 给定一个二进制数组, 计算其中最大连续1的个数. 示例 1: 输入: [1,1,0,1,1,1] 输出: 3 解释: 开头的两位和最后的三位都是连续1,所以最大连续1的个数是 3 ...

  6. Leetcode 1004. 最大连续1的个数 III

    1004. 最大连续1的个数 III  显示英文描述 我的提交返回竞赛   用户通过次数97 用户尝试次数143 通过次数102 提交次数299 题目难度Medium 给定一个由若干 0 和 1 组成 ...

  7. 领扣(LeetCode)最大连续1的个数 个人题解

    给定一个二进制数组, 计算其中最大连续1的个数. 示例 1: 输入: [1,1,0,1,1,1] 输出: 3 解释: 开头的两位和最后的三位都是连续1,所以最大连续1的个数是 3. 注意: 输入的数组 ...

  8. leetcode 1004最大连续1的个数

    给定一个由若干 0 和 1 组成的数组 A,我们最多可以将 K 个值从 0 变成 1 . 返回仅包含 1 的最长(连续)子数组的长度. 输入:A = [1,1,1,0,0,0,1,1,1,1,0], ...

  9. [LeetCode]485. Max Consecutive Ones 找到最大的连续的1的个数

    题目描述 输入只有0和1的数组(长度为正整数,且<10000),找到最大的连续1的个数 比如[1,1,0,1,1,1],输出3 思路 遍历数组,统计当前连续个数curCount和最大连续值max ...

随机推荐

  1. POJ 3046

    题目大意:蚂蚁牙黑,蚂蚁牙红:有A只蚂蚁,来自T个家族,分别记为ant[i]个.同一个家族的蚂蚁长得一样,但是不同家族的蚂蚁牙齿颜色不同.任取n只蚂蚁(S <= n <= B),求能组成几 ...

  2. [Clr via C#读书笔记]Cp17委托

    Cp17委托 简单介绍 delegate回调函数机制,可以理解存储函数地址的变量类型: 类型安全: 引用类型支持逆变和协变: 回调 静态方法,实例方法 委托的本质 所有的委托都派生自System.Mu ...

  3. Redis4.0支持的新功能说明

    本文以华为云DCS for Redis版本为例,介绍Redis4.0的新功能.文章转载自华为云帮助中心. 与Redis3.x版本相比,DCS的Redis4.x以上版本,除了开源Redis增加的特性之外 ...

  4. sql月,年,统计报表sql报表

    select DevName as 设备名称, count(flux) as 流量数据个数, max(flux) as 流量最大值, min(flux) as 流量最小值, avg(flux) as ...

  5. 关于localStorage的实际应用

    在客户端存储数据 HTML5 提供了两种在客户端存储数据的新方法: localStorage - 没有时间限制的数据存储 sessionStorage - 针对一个 session 的数据存储 之前, ...

  6. Thunder团队第二周 - Scrum会议7

    Scrum会议7 小组名称:Thunder 项目名称:i阅app Scrum Master:杨梓瑞 工作照片: 参会成员: 王航:http://www.cnblogs.com/wangh013/ 李传 ...

  7. 【Linux】- Ubuntu安装redis,并开启远程访问

    Ubuntu16.04安装Redis 开启Redis远程访问的步骤: 1.注释掉redis配置文件中的,bind 127.0.0.1 sudo vi /etc/redis/redis.conf #注释 ...

  8. 第三章 持续集成jenkins工具使用之邮件配置

    1   Email Extension Plugin插件安装 持续集成很重要的一环就是及时将构建结果通知到对应的责任人,如:构建失败了,至少需要下发通知给造成本次构建失败的开发人员,如果包含自动化测试 ...

  9. Codeforces 498B Name That Tune

    不想说啥了…这是我被卡常数卡得最惨的一次… 首先根据期望的线性性,我们考虑每首歌能够被认出来的概率,也就是每首歌对答案贡献的期望.那么定义F[i]为第i首歌被认出来的概率是做不了的,自然想到F[i][ ...

  10. 【bzoj2435】[NOI2011]道路修建 树形dp

    题目描述 在 W 星球上有 n 个国家.为了各自国家的经济发展,他们决定在各个国家之间建设双向道路使得国家之间连通.但是每个国家的国王都很吝啬,他们只愿意修建恰好 n – 1条双向道路. 每条道路的修 ...