算法.给定数为数组中2个元素的之和,求出数组的下标

    由于比较简单,所以直接给出代码
   sum.c:

        /*************************************************************************
        > File Name: sum.c
        > Author: zhoulin
        > Mail: 715169549@qq.com
        > 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,"\n*****给定的数组为%p,数组长度为%d,给定的数值为%d*****************\n",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,"\n***************source array*******************\n");
    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]\n",a[i],i);
    }
    fprintf(stdout,"\n*************给定一个数,该数等于数组中任意2个元素之和,输出元素下标*******************\n");
    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]\n",target,a[i],a[tmp[v]],i,tmp[v]);
            flag[a[i]] = (j++);
            flag[v] = j;
        }
    }
    fprintf(stdout,"********************算法的时间效率为O(n)*********************\n");
}
int main(void)
{
    int a[10] = {1,2,7,9,8,3,6,5,4,10};
    target(a,10,9);
    return 0;
}

运行结果:

zhoulin@:~/code/c_src/algorithm/math:./sum

*****给定的数组为0x7ffc2eeb3600,数组长度为10,给定的数值为9*****************

***************source array*******************
  -->1[index=0]
  -->2[index=1]
  -->7[index=2]
  -->9[index=3]
  -->8[index=4]
  -->3[index=5]
  -->6[index=6]
  -->5[index=7]
  -->4[index=8]
  -->10[index=9]

*************给定一个数,该数等于数组中任意2个元素之和,输出元素下标*******************
 target = 9 (1,8)  --> [0,4]
 target = 9 (2,7)  --> [1,2]
 target = 9 (3,6)  --> [5,6]
 target = 9 (5,4)  --> [7,8]
********************算法的时间效率为O(n)*********************

posted @ 2016-04-19 20:36  一个万能盒子叫数据库  阅读(1380)  评论(0编辑  收藏  举报