アルゴリズム与えられた数は配列中の2つの要素の和であり,配列の下付きを求める.
5621 ワード
,
sum.c:
/*************************************************************************
> File Name: sum.c
> Author: zhoulin
> Mail: [email protected]
> Created Time: Mon 18 Apr 2016 08:33:25 PM CST
************************************************************************/
#include <stdio.h>
#include <string.h>
#define max 1024
void target(int a[],int len,int target)
{
fprintf(stdout,"
***** %p, %d, %d*****************
",a,len,target);
int i,j=0;
int tmp[max];// a tmp
int flag[max];
memset(&tmp,-1,sizeof(int)*max);
memset(&flag,-1,sizeof(int)*max);
fprintf(stdout,"
***************source array*******************
");
for(i = 0; i < len; i++)
{
//tmp[1] = 0;tmp[2]=1;tmp[7]=3;tmp[8]=4;tmp[9]=5;
tmp[a[i]] = i;
fprintf(stdout," -->%d[index=%d]
",a[i],i);
}
fprintf(stdout,"
************* , 2 , *******************
");
for(i = 0; i < len; i++)
{
int v = target - a[i];//
if(v <= 0 || target <= a[i])
continue;
if(tmp[v] >= 0 && flag[a[i]] == -1 && flag[v] ==-1)
{
fprintf(stdout," target = %d (%d,%d) --> [%d,%d]
",target,a[i],a[tmp[v]],i,tmp[v]);
flag[a[i]] = (j++);
flag[v] = j;
}
}
fprintf(stdout,"******************** O(n)*********************
");
}
int main(void)
{
int a[10] = {1,2,7,9,8,3,6,5,4,10};
target(a,10,9);
return 0;
}