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. AngularJS 初探

    AngularJS,诞生于2009年,由Misko Hevery等人创建,后为Google所收购.这是一款优秀的前端JS框架,已经被用于Google的多款产品当中.AngularJS有着诸多特性,最为 ...

  2. NOIP2019普及级别模拟 3.30校模拟

    好吧我还是第一次写这种总结类的玩意… 考场心情…hmm…我没睡醒.是的是这样的,反正题都有两三个看错了或者没看懂… 最关键的是!!我!居!然!把!Freopen!写!在!了!程!序!最!后! 然后就和 ...

  3. Tensorflow学习第1课——从本地加载MNIST以及FashionMNIST数据

    很多Tensorflow第一课的教程都是使用MNIST或者FashionMNIST数据集作为示例数据集,但是其给的例程基本都是从网络上用load_data函数直接加载,该函数封装程度比较高,如果网络出 ...

  4. NMAP-端口扫描

    1.时序选项 -T0 -> -T5 速度变快,但是准确性下降,nmap默认是T3 2.指定端口 3.扫描指定TCP和UDP端口 4.快速扫描常见100个端口 5.扫描常见的n的端口 6.TCP ...

  5. kvm网络虚拟化

    网络虚拟化是虚拟化技术中最复杂的部分,学习难度最大. 但因为网络是虚拟化中非常重要的资源,所以再硬的骨头也必须要把它啃下来. 为了让大家对虚拟化网络的复杂程度有一个直观的认识,请看下图 这是 Open ...

  6. BZOJ 3924 ZJOI2015 幻想乡战略游戏 树链剖分

    题目链接:https://www.luogu.org/problemnew/show/P3345(bzoj权限题) 题意概述:动态维护树的上所有点到这棵树的带权重心的距离和.N,Q<=10000 ...

  7. HDU 4300 Clairewd’s message (next函数的应用)

    题意:给你一个明文对密文的字母表,在给你一段截获信息,截获信息前半段是密文,后半段是明文,但不清楚它们的分界点在哪里,密文一定是完整的,明文可能是残缺的,求完整的信息串(即完整的密文+明文串). 题解 ...

  8. Java中I/O流之数据流

    Java 中的数据流: 对于某问题:将一个 long 类型的数据写到文件中,有办法吗?    转字符串 → 通过 getbytes() 写进去,费劲,而且在此过程中 long 类型的数需要不断地转换. ...

  9. C# Excel2007 导出生成 2003兼容格式

    //导出2007格式 AppWb.Saved = true; //保存工作薄 AppExcel.ActiveWorkbook.SaveCopyAs(FilePath); //导出2003格式 AppW ...

  10. Httpd主配置文件httpd.conf 详解

    Apache的主配置文件:/etc/httpd/conf/httpd.conf默认站点主目录:/var/www/html/Apache服务器的配置信息全部存储在主配置文件/etc/httpd/conf ...