看数据范围知,复杂度不超过(nlogn),不过感觉LeetCode很少卡算法时间。
题目要求数组的*****的个数,想到dp动态规划
dp[i][0]表示前i个数字,以第i个元素结尾,全为1的个数
dp[i][1]表示前i个数字,以第i个元素结尾,只存在一个0,其他全为1的个数
个人觉得(以第i个元素结尾)这句话很重要,怎么感觉哪都用到过。
dp[i][0], dp[i][1] 可以缩写成d1,d2。因为第i个元素的状态,只需要已知dp[i-1][0]和dp[i-1][1]。现在对第i个元素分情况讨论:
nums[i]为1的情况,nums[i]为0的情况,我希望还是大家顺着这个思路自己尝试一下。
上代码
class Solution:def findMaxConsecutiveOnes(self, nums: List[int]) -> int:d1, d2 = 0, 0ans = 0for num in nums:if num == 1:d1 += 1d2 += 1else:d2 = d1 + 1d1 = 0ans = max(ans, d2)return ans