Leetcode日练笔记19 #487 Max Consecutive Ones II (Medium)
#487 Max Consecutive Ones II (Medium)
Given a binary array
nums
, return the maximum number of consecutive1
's in the array if you can flip at most one0
.
解题思路:
因为最多可以翻转一个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)相关推荐
- 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 ...
- 【LeetCode】487. Max Consecutive Ones II 解题报告 (C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 动态规划 日期 题目地址:https://leetco ...
- 【Leetcode】487. Max Consecutive Ones II
题目地址: https://leetcode.com/problems/max-consecutive-ones-ii/description/ 给定一个长nnn的010101数组AAA,允许将任意一 ...
- 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 ...
- leetcode 485,487,1004. Max Consecutive Ones I ,II, III(最大连续1的个数问题合集)
485. Max Consecutive Ones https://leetcode.com/problems/max-consecutive-ones/ easy 题,思路不说了,直接上代码. cl ...
- 485. Max Consecutive Ones - LeetCode
Question 485. Max Consecutive Ones Solution 题目大意:给一个数组,取连续1的最大长度 思路:遍历数组,连续1就加1,取最大 Java实现: public i ...
- 8月2日Pytorch笔记——梯度、全连接层、GPU加速、Visdom
文章目录 前言 一.常见函数的梯度 二.激活函数及其梯度 1.Sigmoid 2.Tanh 3.ReLU 三.Loss 函数及其梯度 1.Mean Squared Error(MSE) 2.Softm ...
- 分享Silverlight/WPF/Windows Phone一周学习导读(8月15日-8月19日)
分享Silverlight/WPF/Windows Phone一周学习导读(8月15日-8月19日) 本周Silverlight学习资源更新: Silverlight Tools 4安装时的错误提示 ...
- Silverlight/Windows8/WPF/WP7/HTML5周学习导读(8月13日-8月19日)
Silverlight/Windows8/WPF/WP7/HTML5周学习导读(8月13日-8月19日) 本周Silverlight学习资源更新 Silverlight中如何实现上下标的显示 Lice ...
最新文章
- (转)Android笔记--handler机制
- ELK安装配置,日志展示
- 问卷星调查学生对《算法》教学的建议与反馈
- MSN空间上的以往技术贴整理
- 基于python的天气预报系统,基于python编写的天气抓取程序
- Windows Server 2008 R2之十一Windows Server Backup
- 用keil怎么擦除_分享STM32 FLASH 擦除(以及防止误擦除程序代码)、写入
- org.apache.ibatis.reflection.ReflectionException: There is no getter for property named XXX
- Android 音频开发(二) 采集一帧音频数据
- C语言学习笔记---打印函数printf()和sprintf()函数
- sql入门基础知识分享
- 排序算法(三) —— 直接插入排序
- AWS DeepRacer 强化学习RL,工作流程
- linux安装 treenms
- 概率论与计算机的关系小论文,概率论与数理统计论文
- 如何在html中添加视频链接,在ppt中加入视频超链接的方法步骤
- 有关单片机驱动IR2104遇到的问题及解决方法
- 谷粒商城高级篇-商品上架
- 教育部要求“强保障、上水平”,课后服务该如何提质增效?
- 海关179号出口清单报文CEB603Message描述规范
热门文章
- unity3d VR手柄射线拾取,投掷,发射可拿去的物体
- 三六相PMSM的FOC算法的数字实现(二)
- MyBatis使用DEMO及cache的使用心得
- Webix学习之template
- 五分钟学会ios反编译
- 易语言 kernelbase.dll c0000005,【已解决】win7资源管理器停止工作,出错原因是kernelbase.dll...
- RAD Studio Delphi 10.4 Sydney悉尼中最受欢迎的五个新功能
- 传智黑马java基础学习——day02(变量、运算符)
- 360被曝窃取淘宝店主佣金 上海奇泰为“秘密武器”
- 微软之行总结(删节稿)