码迷,mamicode.com
首页 > 编程语言 > 详细

剑指offer-构建乘积数组

时间:2019-04-08 21:28:52      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:pre   --   数组   ++   ret   ||   item   题目   时间   

题目描述

给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*...*A[n-1]。不能使用除法。
 
方法一:逐个相乘,时间复杂度为O(n2)
 1 public int[] multiply(int[] A) {//数组 my
 2         if(null==A){
 3             return null;
 4         }
 5         int[] re = new int[A.length];
 6         for(int i=0;i<A.length;i++){
 7             re[i]=1;
 8         }
 9         for(int i=0;i<A.length;i++){
10             for(int j=0;j<A.length;j++){
11                 if(i!=j){
12                     re[j]*=A[i];
13                 }
14             }
15         }
16         return re;
17     }

 

方法二:先正向计算B[i]=A[0]*A[1]*...*A[i-1],再逆向相乘B[i]*=A[n-1]*A[n-2]*...*A[i+1],时间复杂度为O(n)

 1 public int[] multiply(int[] A) {//数组 mytip
 2         if(null==A||0==A.length){
 3             return null;
 4         }
 5         int[] re = new int[A.length];
 6         re[0] = 1;
 7         for(int i=1;i<A.length;i++){
 8             re[i]=re[i-1]*A[i-1];
 9         }
10         int temp = 1;
11         for(int i=A.length-1;i>=0;i--){
12             re[i]*=temp;
13             temp*= A[i];
14         }
15         return re;
16     }

 

剑指offer-构建乘积数组

标签:pre   --   数组   ++   ret   ||   item   题目   时间   

原文地址:https://www.cnblogs.com/zhacai/p/10673168.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!