【发布时间】:2021-11-03 04:48:41
【问题描述】:
我有这个数组,例如:[1, 1, 2, 3, 4, 5])
所以我想要的数组是[1,1,2],我写了这段代码:
def Comparison(arr, n):
i = 0
ct = 0
print("call")
while i + len(arr)-n <= len(arr):
print(arr[i:len(arr)-n+i])
if max(arr[i:len(arr)-n+i]) - min(arr[i:len(arr)-n+i]) == 1:
print("change at: "+str(n))
ct = 1
break
i += 1
if ct == 0:
l = arrComparison(arr, n+1)
return l
else:
return n
def longestSubarray(arr):
menor = min(arr)
mayor = max(arr)
n = 0
if mayor - menor > 1:
n = arrComparison(arr, 1)
return len(arr) - n
其中“LongestSubarray”函数只是测试最长的子数组是否不是数组本身,如果不是,则调用另一个,它正在逐步沿着数组移动,“n”表示的数量未在子数组中选择的数字,即当 n=2 时,子数组将是:
[1,1,2,3], [1,2,3,4], [2,3,4,5]
当它找到第一个时,它们会中断并返回 n。 这实际上解决了这个问题,但它确实需要很长时间,所以我想要一种更优化的方式。
【问题讨论】:
-
似乎这个问题可以使用两指针方法在线性时间内解决(“良好范围”周围的左右索引)
-
值是一直在增加还是可以减少?
-
这只是为了这个例子,值可以以任何方式放置,甚至所有元素都相同。
标签: python arrays algorithm optimization