zoukankan      html  css  js  c++  java
  • 算法.给定数为数组中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,"
    *****给定的数组为%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;
    }

    运行结果:

    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)*********************

  • 相关阅读:
    __declspec关键字详细用法
    【转载】前端面试“http全过程”将所有HTTP相关知识抛出来了...
    【转载】理解C语言中的关键字extern
    Linux应用环境实战
    【转载】深入解析连接点
    【转载】COM多线程原理与应用
    【转载】COM的多线程模型
    【转载】COM 连接点
    【转载】COM:IUnknown、IClassFactory、IDispatch
    101. Symmetric Tree
  • 原文地址:https://www.cnblogs.com/innobase/p/5409993.html
Copyright © 2011-2022 走看看