LeetCode-Python-485. 最大連続1の個数

1285 ワード

バイナリ配列を指定し、最大連続1の個数を計算します.
例1:
  : [1,1,0,1,1,1]
  : 3
  :                1,      1     3.

注意:
  • 入力配列は、0および1のみを含む.
  • 入力配列の長さは正の整数であり、10000を超えない.

  • 第一の考え方:
    直接暴力で解く.
    class Solution(object):
        def findMaxConsecutiveOnes(self, nums):
            """
            :type nums: List[int]
            :rtype: int
            """
            
            res = 0
            l = 0
            for i in nums:
                if i:
                    l += 1
                    res = max(l, res)
                else:                
                    l = 0
            return res

    2つ目の考え方:
    ダイナミックプランニングは、0~iの最長連続1シーケンスの長さをdp[i]で表し、
    明らかにdp[0]=nums[0],
    iに対して!=0の場合、
    dp[i] = dp[i - 1] + 1 if nums[i] == 1  OR
    dp[i] = 0 if nums[i] != 1
    class Solution(object):
        def findMaxConsecutiveOnes(self, nums):
            """
            :type nums: List[int]
            :rtype: int
            """
            dp = [nums[0]]
            for i in range(1, len(nums)):
                if nums[i]:
                    dp.append(dp[i-1] + 1)
                else:
                    dp.append(0)
            # print dp
            return max(dp)