我有一个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)
答案 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的倍数。