数组和寻找SubArray

时间:2017-11-15 15:45:39

标签: python python-3.x

输入= 5 4 5 5 6 7 8 8 8 7 6

在此输入中,最长的子阵列为[6,10],其中最大值= 8,最小值为7,差值为1.差值应小于等于1.

子阵列,使得该范围中的最小值和最大值之间的差异最多为1

输出应为7 8 8 8 7 请建议我如何编码?

#THIS IS MY CODE
n = int(input())
data = []

for _ in range(n):
    data.append(int(input()))

for i in range(0,n):
    maxi = max(data[i+1:])
    mini = min(data[i+1:])
    diff = maxi - mini

    if diff <= 1:
       print(data[i:])
       l = len(data[i:])
       print(l)
       break

1 个答案:

答案 0 :(得分:1)

这是一个天真的解决方案。制作所有可能的子列表并过滤掉符合您条件的子列表。

import numpy as np
a = [5,4,5,5,6,7,8,8,8,7,6]
max_diff = 1
sub_arrays = [x for x in [a[i:j] for i in range(len(a)) for j in range(i+1, len(a))] if (max(x)-min(x) <= max_diff)]
max_sub_array = sub_arrays[np.argmax([len(sa) for sa in sub_arrays])]

在您的样本输入上,输出为:

[7, 8, 8, 8, 7]