给定一个数组a[N],我们希望构造数组b[N],其中b[i]=a[0]*a[1]*...*a[N-1]/a[i]。在构造过程:

不允许使用除法;

要求O(1)空间复杂度和O(n)时间复杂度;

除遍历计数器与a[N] b[N]外,不可使用新的变量(包括栈临时变量、对空间和全局静态变量等);

请用程序实现并简单描述。

虽然前不久做了一次,但手写还是错,临界问题未考虑清楚。。。。闷~

现在查错不使用调试。。。下次要学会证明算法的正确性。

 1 void func3(int a[], int b[], int n)
 2 {
 3     b[n-1] = 1;
 4 
 5     for (int i=n-1; i>0; i--)
 6     {
 7         b[i-1]= b[i]*a[i];
 8     }
 9     b[n-1]=a[0];
10     for (i=1; i<n-1; i++)
11     {
12         b[i] *= b[n-1];
13         b[n-1] = b[n-1]*a[i];
14     }
15 
16 }

其实还有几种方法。。。

相关文章:

  • 2021-07-06
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-08-30
  • 2021-06-29
  • 2021-05-14
猜你喜欢
  • 2022-01-29
  • 2021-11-25
  • 2021-08-27
  • 2022-12-23
  • 2022-12-23
  • 2021-07-21
  • 2022-01-27
相关资源
相似解决方案