m0_61558674 2022-01-04 23:24 采纳率: 50%
浏览 186
已结题

python 修改数组问题

题目描述
给定一个长度为 n、元素由 0 或 1 组成的数组。

现在可以选择若干(可以为 0)个值为 0 的元素,将其修改为 1。

注:

x为数组中最长连续 1 子段的长度(规定,若所有数均为 0,则 x 为 0);
y 为修改的元素的个数。
求要怎么修改才能使 x−y 最大,并构造一个方案(输出修改后的数组)。

输入格式
本题含有多组数据。

第一行一个整数 T 表示数据组数。

接下来 2×T 行,每 2 行表示一组数据。

在一组数据中,第一行一个整数 n,表示数组的长度;

第二行 n 个整数(0 或 1),表示给定的数组。

输出格式
共 2×T 行,每 2 行表示一组数据。

在一组数据中,第一行输出一个整数表示 x−y 的最大值;

第二行 n 个整数(0 或 1)表示修改以后的数组。如有多个方案,任意输出一种即可

输入输出样例

img

思路主要是:从 0修改为 1 的位置一定会属于最终序列的唯一的最长连续 1 子段( x-y最大值),所以全部改为 1。
代码出现了问题,还请帮看看

import itertools
T = int(input())

for i in range(T):
    a = int(input())
    b = input().split()
    y = b.count("0")#统计y变化的个数
    b = str(b)
    b = b.replace("0","1")#求x数组中最长连续1子段的长度
    x = max([len(list(v)) for k,v in itertools.groupby(b)])
    print(x-y)
    #麻烦主要是这几步,出现了问题
    
    print(b.strip("[]"))




  • 写回答

2条回答 默认 最新

  • 藏猊 2022-01-05 09:11
    关注

    就看题目中的例子
    5
    0 1 0 1 0
    这里,如果把中间0改成1,最大长度增加了2,而修改数只增加了1,于是x-y就增加了1。
    但是,如果修改头尾,就会发现最大长度增加1,修改数也只增加了1,x-y不变。因此,可以肯定的是,只要数组内仍然存在未相邻的1,x-y就不是最大,而若已经将全部1连接,则继续增加长度也没有意义了。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 1月5日
  • 创建了问题 1月4日

悬赏问题

  • ¥15 用php隐藏类名和增加类名
  • ¥15 算法设计与分析课程的提问
  • ¥20 汇川小型plc控制小米微电机
  • ¥15 用MATLAB汇总拟合图
  • ¥15 智能除草机器人方案设计
  • ¥15 对接wps协作接口实现消息发送
  • ¥15 SQLite 出现“Database is locked” 如何解决?
  • ¥15 已经加了学校的隶属邮箱了,为什么还是进不去github education?😭
  • ¥15 求会做聚类,TCN的朋友有偿线上指导。以下是目前遇到的问题
  • ¥100 无网格伽辽金方法研究裂纹扩展的程序