除己外乘积

问题描述:

对于一个数组A[N],要求生成一个新的数组B[N]。对数组B的要求是B[i] = A[0] * A[1]…*A[i - 1] * A[i+ 1]*…*A[N],也就是不包括A[i]的剩余元素之积。不准用除法,要求时间复杂度为O[N]。

 

解法:直接上程序

  #include <stdio.h>

  int main()
  {
      int a[5] = {1, 2, 3, 4, 5};
      int b[5];
      int a1[6], a2[6];
      a1[0] = 1;
      a2[5] = 1;

      int j = 0;
      for (int i = 0; i < 5; i++)
      {
          a1[i + 1] = a1[i] * a[i];
          j = 5 - i;
          a2[j - 1] = a2[j] * a[j - 1];
      }

      for (int i = 0; i < 5; i++)
      {
          b[i] = a1[i] * a2[i + 1];
          printf("%d\t", b[i]);
      }
      printf("\n");

      return 0;
  }

因为b[i] = a[0] * ... *a[i - 1] * a[i + 1] * ... * a[n -1];

可以令f1(i) = a[0] * ... *a[i - 1];    f2(i) =  a[i + 1] * ... * a[n -1];

直接用a1, a2两个数组来记录[0..n)的所有结果,供后边计算使用,最后所需要时间复杂度为O(n)

 

分享下同学的答案,空间复杂度控制在O(1)上:http://blog.csdn.net/huagong_adu/article/details/7457948

 

posted on 2012-04-13 11:30  aho  阅读(220)  评论(0编辑  收藏  举报

导航