我被告知编写如下算法有三个相同大小N的数组A [],B [],C [].找出所有可能的(i,j,k),使A [i] + B [j ] = C [k]的.最大允许时间复杂度为O(N ^ 2).以下是我为O(N ^ 2)编写的算法
#include<stdio.h>
#define MAX 1000
struct sum
{
int result;
int i;
int j;
};
int main()
{
struct sum sum_array[MAX];
int n=4;
int a[] = {4,1,2,5};
int b[] = {1,7,6,0};
int c[] = {11,3,8,2};
int k;
int i,j;
for(i=0;i<MAX;i++)
sum_array[i].result=-1;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
sum_array[a[i]+b[j]].result=a[i]+b[j];
sum_array[a[i]+b[j]].i=i;
sum_array[a[i]+b[j]].j=j;
}
}
for(k=0;k<n;k++)
{
if(sum_array[c[k]].result==c[k])
{
printf("<i,j,k> = <%d,%d,%d>\n",sum_array[c[k]].i,sum_array[c[k]].j,k);
}
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我的问题是如何更快地完成它?任何O(N*logN)或更好的算法?
此致,Arka
最大答案的大小为N ^ 3,因此不能实现更好的复杂性.举个例子A = {1,1,1,1,1,1,1},B = {1,1,1,1,1,1} C = {2,2,2,2,2,2你接近的方法不会为上面的例子输出所有可能的三元组.
| 归档时间: |
|
| 查看次数: |
352 次 |
| 最近记录: |