• 题目要求:

image.png

  • 思路:

    • 1出现的次数为,两个0之间,或是数组的头到第一个0,最后一个0到数组的尾
    • 所以定义一个times,记录1出现的次数,初始值为0,定义一个index,记录第一个1出现的位置,初始值为0,遍历数组,当出现一个0时,用0出现的下标减去index,把减完的这个值与times做比计较,把较大的赋给times。
    • 遍历结束后,index当前的值是最后一次0出现的位置+1,所以在数组中index与其之后1的个数没有计算,用数组长度-index,与times做比较,把较大的赋给times
  • 核心代码:
# index记录每一次连续出现的第一个1的位置,初始值为数组的头也就是0
index = 0
# 用来记录1连续出现的最多的次数
times = 0
# 遍历数组,如果值为0时,把当前的下标减掉index,求出当前一串1的个数,把当前的个数与之前记录的出现过的个数比较,把较大的赋给times,index+1,记录下一串出现的连续的1的第一个位置
for i in range(len(nums)):
    if nums[i] == 0:
        times = max(times,i - index)
        index = i + 1
# 数组循环结束之后,index之后出现的1的次数还没有记录,所以用数组长度减掉index
times = max(times,len(nums) - index)
return times

加上判断数组是否为空语句

  • 完整代码:
class Solution(object):
    def findMaxConsecutiveOnes(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        if len(nums) == 0:
            return None
        index = 0
        times = 0
        
        for i in range(len(nums)):
            if nums[i] == 0:
                times = max(times,i - index)
                index = i + 1
        
        times = max(times,len(nums) - index)
        return times

Adrianna
1 声望2 粉丝