用 Python 编写一个通过翻转 k 位来查找最长 1 集长度的程序
pythonserver side programmingprogramming
假设我们有一个二进制列表,因此这里只有 1 和 0 可用,并且我们还有另一个数字 k。我们最多可以将 k 个 0 设置为 1,我们必须找到包含所有 1 的最长子列表的长度。
因此,如果输入为 nums = [0, 1, 1, 0, 0, 1, 1] k = 2,则输出将为 6,因为我们可以将中间的两个 0 设置为 1,然后列表变为 [0, 1, 1, 1, 1, 1, 1]。
为了解决这个问题,我们将遵循以下步骤 −
- zeros := 0, ans := 0, j := 0
- 对于 nums 中的每个索引 i 和值 n,执行
- zeros := zeros + (当 n 与 0 相同时为 1,否则为 0)
- 当 zeros > k,执行
- zeros := zeros - (当 nums[j] 与 0 相同时为 1,否则为 0)
- j := j + 1
- 如果 i - j + 1 > ans,则
- ans := i - j + 1
- 返回 ans
让我们看看下面的实现以便更好地理解 −
示例
class Solution: def solve(self, nums, k): zeros = 0 ans = 0 j = 0 for i, n in enumerate(nums): zeros += n == 0 while zeros > k: zeros -= nums[j] == 0 j += 1 if i - j + 1 > ans: ans = i - j + 1 return ans ob = Solution() nums = [0, 1, 1, 0, 0, 1, 1] k = 2 print(ob.solve(nums, k))
输入
[0, 1, 1, 0, 0, 1, 1], 2
输出
6
相关文章
有用资源
python 参考教程 - 该教程包含有关 python 的更多信息:https://www.cainiaomax.com/python/

