#487 Max Consecutive Ones II (Medium)

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

解题思路:

因为最多可以翻转一个0,那么等同于0所包围的1可以看成可用于加法的有效片段。结果就是取邻近的两个片段之和的最大值再加1。

edge case是,整个数列没有0,或者只有1个0,那么结果直接是数列的长度。

有效片段的长度,用one_counter来统计。因为还要考虑0的长度,zero_counter,如果超过1,那么两个片段之间就不可以相加。用prev来储存上一个有效片段的长度值,用于和当前的one_counter相加,相加之和与之前邻近片段之和作对比,取最大值。

直到数列的最后一个数值。如果最后一个数值为1,那么当前的one_counter还没有参与到相加的运算中,所以要补一步。如果最后一个数值为0,那么已经当前的one_counter已经参与了,没有浪费。

(步骤有点繁琐,可能问题拆解还不是最优解。要参考一下其他solution)

class Solution:def findMaxConsecutiveOnes(self, nums: List[int]) -> int:if 0 not in nums or nums.count(0) == 1:return len(nums)one_counter = zero_counter = prev = addition = 0for i in nums:if i == 1:one_counter += 1zero_counter = 0else:zero_counter += 1if zero_counter > 1:prev = 0if one_counter != 0:addition = max(addition, prev + one_counter)prev, one_counter = one_counter, 0if one_counter != 0:addition = max(addition, prev + one_counter)return addition+1

runtime:

Discussion Forum里cmc也是这个思路,分为prev和curr。但是没有那么复杂。暂时还没看懂,怎么处理很多个0间隔的,以及整个数列只有1个0或没有0的情况。

class Solution(object):def findMaxConsecutiveOnes(self, nums):# previous and current length of consecutive 1 pre, curr, maxlen = -1, 0, 0for n in nums:if n == 0:pre, curr = curr, 0else:curr += 1maxlen = max(maxlen, pre + 1 + curr )return maxlen

绝了。总算看懂。通过把pre设为-1,来解决数列中没有0或者只有1个0的情况。确实也make sense。如果一直没有遇到零,那么就不存在prev,上一个有效片段。如果只存在1个0,那么当下的有效片段,curr就是0,如果遇到第二个0,就通过把curr的0值给到prev,来清空prev的值。所以其实没有必要统计0的个数。通过当前输入的数为0,来控制prev和curr的应有值。

还有个和之前思路的最大的不同,是把提取两者之和的最大值放在了遇到1的时候做,我之前是遇到0的时候才做。所以放在遇到1的时候执行,就不必在区分最后一个数为0还是1,不存在漏掉curr的情况。也就没有重复max()这个语句。

再重写一遍:

class Solution:def findMaxConsecutiveOnes(self, nums: List[int]) -> int:prev, counter, longest = -1, 0, 0for i in nums:if i == 0:prev, counter = counter, 0else:counter += 1longest = max(longest, prev + counter + 1)return longest

(倒着推能看懂,但是不看的话,真的很难自己总结出这样的思路……还是水平没到

runtime:

一定要二刷和多看的题。

Leetcode日练笔记19 #487 Max Consecutive Ones II (Medium)相关推荐

  1. Leetcode日练笔记31 #19 #206 # 203 Rmv Nth Node From End Reverse Linked List Rmv Linked List Elements

    Given the head of a linked list, remove the nth node from the end of the list and return its head. E ...

  2. 【LeetCode】487. Max Consecutive Ones II 解题报告 (C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 动态规划 日期 题目地址:https://leetco ...

  3. 【Leetcode】487. Max Consecutive Ones II

    题目地址: https://leetcode.com/problems/max-consecutive-ones-ii/description/ 给定一个长nnn的010101数组AAA,允许将任意一 ...

  4. Leetcode日练笔记8 #702 Search in a Sorted Array of Unknown Size (Medium)

    #702 Search in a Sorted Array of Unknown Size 题目: This is an interactive problem. You have a sorted ...

  5. leetcode 485,487,1004. Max Consecutive Ones I ,II, III(最大连续1的个数问题合集)

    485. Max Consecutive Ones https://leetcode.com/problems/max-consecutive-ones/ easy 题,思路不说了,直接上代码. cl ...

  6. 485. Max Consecutive Ones - LeetCode

    Question 485. Max Consecutive Ones Solution 题目大意:给一个数组,取连续1的最大长度 思路:遍历数组,连续1就加1,取最大 Java实现: public i ...

  7. 8月2日Pytorch笔记——梯度、全连接层、GPU加速、Visdom

    文章目录 前言 一.常见函数的梯度 二.激活函数及其梯度 1.Sigmoid 2.Tanh 3.ReLU 三.Loss 函数及其梯度 1.Mean Squared Error(MSE) 2.Softm ...

  8. 分享Silverlight/WPF/Windows Phone一周学习导读(8月15日-8月19日)

    分享Silverlight/WPF/Windows Phone一周学习导读(8月15日-8月19日) 本周Silverlight学习资源更新: Silverlight Tools 4安装时的错误提示 ...

  9. Silverlight/Windows8/WPF/WP7/HTML5周学习导读(8月13日-8月19日)

    Silverlight/Windows8/WPF/WP7/HTML5周学习导读(8月13日-8月19日) 本周Silverlight学习资源更新 Silverlight中如何实现上下标的显示 Lice ...

最新文章

  1. (转)Android笔记--handler机制
  2. ELK安装配置,日志展示
  3. 问卷星调查学生对《算法》教学的建议与反馈
  4. MSN空间上的以往技术贴整理
  5. 基于python的天气预报系统,基于python编写的天气抓取程序
  6. Windows Server 2008 R2之十一Windows Server Backup
  7. 用keil怎么擦除_分享STM32 FLASH 擦除(以及防止误擦除程序代码)、写入
  8. org.apache.ibatis.reflection.ReflectionException: There is no getter for property named XXX
  9. Android 音频开发(二) 采集一帧音频数据
  10. C语言学习笔记---打印函数printf()和sprintf()函数
  11. sql入门基础知识分享
  12. 排序算法(三) —— 直接插入排序
  13. AWS DeepRacer 强化学习RL,工作流程
  14. linux安装 treenms
  15. 概率论与计算机的关系小论文,概率论与数理统计论文
  16. 如何在html中添加视频链接,在ppt中加入视频超链接的方法步骤
  17. 有关单片机驱动IR2104遇到的问题及解决方法
  18. 谷粒商城高级篇-商品上架
  19. 教育部要求“强保障、上水平”,课后服务该如何提质增效?
  20. 海关179号出口清单报文CEB603Message描述规范

热门文章

  1. unity3d VR手柄射线拾取,投掷,发射可拿去的物体
  2. 三六相PMSM的FOC算法的数字实现(二)
  3. MyBatis使用DEMO及cache的使用心得
  4. Webix学习之template
  5. 五分钟学会ios反编译
  6. 易语言 kernelbase.dll c0000005,【已解决】win7资源管理器停止工作,出错原因是kernelbase.dll...
  7. RAD Studio Delphi 10.4 Sydney悉尼中最受欢迎的五个新功能
  8. 传智黑马java基础学习——day02(变量、运算符)
  9. 360被曝窃取淘宝店主佣金 上海奇泰为“秘密武器”
  10. 微软之行总结(删节稿)