输入= 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
答案 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]