使用 Python 查找删除一个元素后最长全 1 子数组的程序
假设我们有一个名为 nums 的二进制数组,我们可以从中删除一个元素。我们必须找到结果数组中仅包含 1 的最长非空子数组的大小。如果没有这样的子数组,则返回 0。
因此,如果输入类似于 nums = [1,0,1,1,1,0,1,1,0],则输出将为 5,因为通过删除位置 5 处的 0,我们可以得到一个子数组 [1,1,1,1,1],其中有五个 1。
为了解决这个问题,我们将遵循以下步骤:
如果 nums 中不包含 0,则
返回 nums 的大小减 1
如果 nums 中不包含 1,则
返回 0
a := 一个新的列表
cnt := 0
对于 nums 中的每个 i,执行以下操作:
如果 i 等于 0,则
如果 cnt 不等于 0,则
将 cnt 插入到 a 的末尾
cnt := 0
将 i 插入到 a 的末尾
否则,
cnt := cnt + 1
如果 cnt 不等于 0,则
将 cnt 插入到 a 的末尾
Max := 0
对于从 0 到 a 的大小的范围内的 i,执行以下操作:
如果 a[i] 不等于 0,则
进行下一次迭代
如果 a[i] 等于 0 且 i 等于 a 的大小减 1,则
Max := Max 和 a[i-1] 中的最大值
否则,当 a[i] 等于 0 且 i 等于 0 时,则
Max := Max 和 a[i+1] 中的最大值
否则,当 a[i] 等于 0 时,则
Max := Max 和 (a[i+1]+a[i-1]) 中的最大值
返回 Max
示例
def solve(nums): if 0 not in nums: return len(nums)-1 if 1 not in nums: return 0 a = [] cnt = 0 for i in nums: if i == 0: if cnt != 0: a.append(cnt) cnt = 0 a.append(i) else: cnt += 1 if cnt!=0: a.append(cnt) Max = 0 for i in range(len(a)): if a[i] != 0: continue if a[i] == 0 and i == len(a)-1: Max = max(Max,a[i-1]) elif a[i] == 0 and i == 0: Max = max(Max,a[i+1]) elif a[i] == 0: Max = max(Max,a[i+1]+a[i-1]) return Max nums = [1,0,1,1,1,0,1,1,0] print(solve(nums))
输入
[1,0,1,1,1,0,1,1,0]
输出
5
广告
数据结构
网络
关系型数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C 语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP