使用python,如何实现以下问题
给定一个数组,求该数组中最长重复子数组(每个子数组间不重叠),输出第一个子数组的起始下标与长度、并将该数组输出,要求程序的时间复杂度小于等于O(nlogn)
程序示例
示例1
输入:[1,2,3,4,5,7,2,3,4,5]
输出:
起始下标:1
长度:4
重复子数组:[2,3,4,5]
示例2
输入:[0,1,1,1,1]
输出:
起始下标:1
长度:2
重复子数组:[1,1]
最长重复子数组长度肯定小于等于len/2,暴力循环求解
n=eval(input())
def search(n):
for i in range(int(len(n) / 2), 0, -1):
for j in range(int(len(n) / 2)):
for h in range(j + i, len(n) - i + 1):
if n[j:j + i] == n[h:h + i]:
print('起始下标:',j)
print('长度:',i)
print('重复子数组:',n[j:j + i])
return
search(n)
num = [1, 2, 3, 4, 5, 7, 2, 3, 4, 5]
for i in range(int(len(num) / 2), 0, -1):
for j in range(int(len(num) / 2)):
for h in range(j + i, len(num) - i + 1):
if num[j:j + i] == num[h:h + i]:
print('起始下标:',j)
print('长度:',i)
print('重复子数组:',num[j:j + i])
exit()
a = [1,2,7,1,2,3,4,5]
length=2
_length=None
while length<(len(a)//2+1):
for start_index in range(len(a)):
res=a[start_index:start_index+length]
for i in range(start_index+1,len(a)):
temp=a[i:i+length]
if res==temp:
print(res,start_index,length)
_res=res
_index=start_index
_length=length
length +=1
if _length:
print("起始下标{},长度{},子数组{}".format(_index,_length,_res))
else:
print("没有这样的子数组")
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!