【每日一题】【LeetCode】【第二十五天】【Python】最大连续1的个数

解决之路= =

题目描述

在这里插入图片描述

测试案例(部分)

在这里插入图片描述

第一次

双指针来试试,初始left0,从数组头开始,right初始是left+1也就是1。只要right不越界,循环就一直进行。然后每轮循环检查leftright两个位置的元素是否相等,相等就right+1继续检查,不相等就调整leftright的位置。

class Solution(object):
    def findMaxConsecutiveOnes(self, nums):
        n = len(nums)
        left = 0
        right = 1
        len_list = []
        while right < n:
            if nums[left] == nums[right]:
                right += 1
            else:
                len_list.append(right - left)
                left = right
                right = left + 1
        return max(len_list)

测试错误。

在这里插入图片描述

第二次

简单盘一下逻辑代码,感觉是越界问题没有处理好。

比如第一个测试列表一样,结尾的三个1为什么检查不出来?就是因为位置为3的和位置为5的元素相同,触发right+1,然后不满足while循环条件,直接结束了,没有将本次检查的结果加到len_list中。

class Solution(object):
    def findMaxConsecutiveOnes(self, nums):
        n = len(nums)
        left = 0
        right = 1
        len_list = []
        while right < n:
            if nums[left] == nums[right]:
                right += 1
                # 加上一个判断,处理越界问题
                if right == n:
                    len_list.append(right - left)
                    break
            else:
                len_list.append(right - left)
                left = right
                right = left + 1
        return max(len_list)

测试正确,提交!报错了。

在这里插入图片描述

第三次

再加个判断避免一下这个极端情况。然后发现继续报错。输入[1]返回1,输入[0]返回0。很疑惑,加上两个判断之后,还是报错。

class Solution(object):
    def findMaxConsecutiveOnes(self, nums):
        if nums == [1]:
            return 1
        if nums == [0]:
            return 0
        n = len(nums)
        left = 0
        right = 1
        len_list = []
        while right < n:
            if nums[left] == nums[right]:
                right += 1
                if right == n:
                    len_list.append(right - left)
                    break
            else:
                len_list.append(right - left)
                left = right
                right = left + 1
        return max(len_list)

在这里插入图片描述

发现题目意思理解有问题。。。。题目说数组是一个存二进制的数组,只有0和1,0表示没有数据,判断连续只是对于1来说的。

只能说,是审题没审好= =。重新看看思路吧。

第四次

中途被叫去喝了顿酒= =,回来接着写。在路上自己想到可以这么改,我们看完代码再来解释思路。

class Solution(object):
    def findMaxConsecutiveOnes(self, nums):
        count = 0
        res = []
        for v in nums:
            if v != 1:
                res.append(count)
                count = 0
            else:
                count += 1
        res.append(count)
        return max(res)

这个代码的思路个人觉得比较巧妙,一个循环O(n)实现。

设置一个计数器和一个空列表,空列表存放每次清零之前的计数情况。

思路就是遇到0就清零。

然后最后返回列表中的最大值。即可完成需求。

最后循环之外又加了一句res.append(count)是为了解决第一次中的越界问题,大家盘一盘思路就可以理解了。

测试正确,提交成功!打败了70%多用户,40ms,及格了!

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值