找到数组中最近的可分数

时间:2015-08-08 19:42:17

标签: algorithm data-structures

我有一个N整数数组N<= 10^6 every index i我必须找到i最近的左邻居A[j]%A[i]==0 0<j<i

实施例

3 4 2 6 7 3

Nearest Neighbor array 
-1 -1 1 -1 -1 3

As for last element i.e 3 6%3==0 and index of 6 is 3 so ans is 3
similar for 2 nearest neighbor is 4 

蛮力方法

int[] Neg = new int[n];
Arrays.fill(Neg,-1);
for(int i=1;i<n;i++)
for(int j=i-1;j>=0;j--)
  if(A[j]%A[i]==0){
    Neg[i]=j;
  break;
}

O(n^2) approach and will fail我怎么能想出一个更好的方法,可能是O(nlogn)

1 个答案:

答案 0 :(得分:3)

有一个简单的O(n.sqrt(n))算法如下:

Initialize an array D to all -1.
For i = 1,2,...,n
   Let a = A[i]
   Output D[a]
   For each divisor d of A[i]:
       set D[d] = i

您可以使用简单的循环找到O(sqrt(n))中数字的所有除数,或者您可以更快地对分解进行预计算。

该算法通过使用D [x]来存储最近数字A [j]的位置j,该数字是x的倍数。