从随机数组中的算术系列中查找连续数字

时间:2011-02-21 18:03:45

标签: algorithm sequence

我有一个考试问题,要求解决方案找到算术系列n,n * 2,n * 3,n * i(其中i是数组长度-1)中有多少个连续数字在随机数组中。只要从n开始并且数字是连续的,系列中的数字可以是数组中的任何顺序。允许重复。

例如:n = 2,你的数组是[4,5,1,2,1,2,6,10]

将返回3.因为从2开始的最长连续运行是2,4,6。

我提出的解决方案是将上面的数组转换为[2,0,0,1,0,1,3,5],将n(2)整除的数除以n并改变非模n的数到了0.

然后我将数组快速分配到[0,0,0,1,1,2,3,5]并进行线性检查以找到答案。

这给了我一个2n + n log n或O(n log n)的解决方案。

这个问题有更好的解决方案吗?我的意思是一个更好的数量级,如O(n)。

3 个答案:

答案 0 :(得分:2)

使用额外存储空间的O(i)解决方案是使用大小为i的位向量初始化为0.如果遇到n * j,则遍历数组并将条目j设置为1。之后,找到位向量开头的1的数量。

答案 1 :(得分:0)

如果值的范围存在合理且已知的界限,则可以使用counting sort将复杂度降低为O(n)(或者在您的术语中为O(i))。

答案 2 :(得分:0)

你开始很好。循环遍历数组并将每个数组单元 Aj 设置为 Aj / n

制作一个长度为 i-1 的数组(您有 i-1 数字)。

将它们全部设为零。

再次遍历数组,对于您遇到的每个数字( k ),将位 k (如果小于 m )设置为1

从位置1循环通过位数组,并在第一个零点处停止。这就是结果。

你有 4 * i 迭代...... O(i)