对应的leetcode题号: 485、487、1004
1. 最大连续1的个数 I Max Consecutive Ones
给定一个二进制数组 nums
, 计算其中最大连续 1
的个数。
示例 1:
输入:nums = [1,1,0,1,1,1]
输出:3
解释:开头的两位和最后的三位都是连续 1 ,所以最大连续 1 的个数是 3.
示例 2:
输入:nums = [1,0,1,1,0,1]
输出:2
提示:
1 <= nums.length <= 10^5
nums[i] 不是 0 就是 1.
代码1:
class Solution: def findMaxConsecutiveOnes(self, nums): if not nums: return 0 count = 0 max_count = 0 for i in range(len(nums)): if nums[i] == 1: count += 1 else: max_count = max(max_count, count) count = 0 max_count = max(max_count, count) return max_count if __name__ == '__main__': s = Solution() nums = [1,1,0,1,1,1] print(s.findMaxConsecutiveOnes(nums)) nums = [1,0,1,1,0,1] print(s.findMaxConsecutiveOnes(nums))
代码2:
class Solution: def findMaxConsecutiveOnes(self, nums): res = 0 i = 0 j = len(nums)-1 while i <= j: if nums[i] == 0: i += 1 elif nums[j] == 0: j -= 1 else: res += 1 i += 1 j -= 1 return res if __name__ == '__main__': s = Solution() nums = [1,1,0,1,1,1] print(s.findMaxConsecutiveOnes(nums)) nums = [1,0,1,1,0,1] print(s.findMaxConsecutiveOnes(nums))
输出:
3
2
2. 最大连续1的个数 II Max Consecutive Ones
给定一个二进制数组,你可以最多将 1 个 0 翻转为 1,找出其中最大连续 1 的个数。
示例 :
输入:nums = [1,0,1,1,0]
输出:4
解释:翻转第一个 0 可以得到最长的连续 1。 当翻转以后,最大连续 1 的个数为 4。
提示:
1 <= nums.length <= 10^5
nums[i]
不是0
就是1
.
代码:
python
输出:
3. 最大连续1的个数 III Max Consecutive Ones
给定一个二进制数组 nums
和一个整数 k
,如果可以翻转最多 k
个 0
,则返回 数组中连续 1
的最大个数 。
示例 1:
输入:nums = [1,1,1,0,0,0,1,1,1,1,0], k = 2
输出:6
解释:[1,1,1,0,0,1,1,1,1,1,1]
粗体数字从 0 翻转到 1,最长的子数组长度为 6。
示例 2:
输入:nums = [0,0,1,1,0,0,1,1,1,0,1,1,0,0,0,1,1,1,1], k = 3
输出:10
解释:[0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1]
粗体数字从 0 翻转到 1,最长的子数组长度为 10。
提示:
1 <= nums.length <= 10^5
nums[i] 不是 0 就是 1
0 <= k <= nums.length
代码:
python
输出: