现在我有 N 个不同的整数,我需要找到一个具有最多数字的区间,其值在 O(NlogN) 时间区间的端点之间。我称之为“分而治之”的问题,因为它属于我期末考试的“分而治之”类别。我已经考虑了 2 周并且做了很多实验,但没有一个是正确的(与蛮力算法相比)。有人可以帮助我吗?
例子:
8,1,3,4,7。答案是 1-7。
2,6,5,4,9,8。答案是 2-9 或 2-8。
我认为“间隔”这个词并不能表达我的意思。我的意思是找到数组的一个子序列,它的值在子序列的端点之间的数字最多。eg.1:“1,3,4,7”有两个数字(3,4),eg.2:“2,6,5,4,9”和“2,6,5,4,9”都有,8" 有三个数字(6,5,4)。
这是我的代码(O(n ^ 2))。@Vaughn Cato 我用它来与您的代码进行比较。
#! /usr/bin/env python
#coding=utf-8
import itertools
def n2(numbers):
a = [0]*len(numbers)
ans = -1
l = 0
r = 0
for j in range(1,len(numbers)):
t = 0
for i in range(j-1,-1,-1):
if numbers[i]<numbers[j]:
x = t - a[i]
if x>ans:
ans = x
l = i
r = j
t += 1
else:
a[i] += 1
return (numbers[l],numbers[r],ans)
def countBetween(numbers,left,right):
cnt = 0
for i in range(left+1,right):
if numbers[left]<numbers[i]<numbers[right]:
cnt += 1
return cnt
for numbers in itertools.permutations(range(5)):
ans1=n2(numbers)
ans2=longestInterval(numbers)
if(ans1[2]!=ans2[2]):
print ans1,ans2,numbers