剑指Offer(数组---构建乘积数组)

数组—构建乘积数组

题目描述

给定一个数组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]。*不能使用除法。(注意:规定B[0] = A[1] * A[2] * … * A[n-1],B[n-1] = A[0] * A[1] * … * A[n-2];)

题目分析

数组B中的元素B[i]=A[0]A[1]*…*A[i-1]A[i+1]A[n-1]*中没有A[i]这一项

思路(一)
function multiply(array){
  var a=array; 
  var b=[];
  for(var i=0;i<a.length;i++){
      var sum=1;
      for(var j=0;j<a.length;j++){
	 if(i!=j){
		sum*=a[j];
		}
	    }
	b[i]=sum;
    }
  return b;
 }
思路(二)

通过ECMAScript5为数组定义的迭代方法,使用filter()方法,对数组中的每一项运行给定函数,返回该函数会返回true是像组成的数组,使用map()方法,对数组中的每一项运行给定函数,返回每次函数调用的结果组成的数组。

function multiply(array){	
     if(array==null){
     return false;
	}
     var arr=[];
     for(i=0;i<array.length;i++){
     //选出array数组中下标index不等于i的值
        var filterResult=array.filter(function(value,index){
        return(index !=i);
        });
        var temp=1;
        //通过map定义每次执行的函数
        filterResult.map(function(value){
        temp*=value;
        });
        arr.push(temp);
     }
   return arr;
}
思路(三)

假设数组A为[2,3,4,5]
则B中的各个元素值分别为:
B0为[1,3,4,5]的乘积
B1为[2,1,4,5]的乘积
B3为[2,3,1,5]的乘积
B4为[2,3,4,1]的乘积
将与i对应的数字存为1即可

function multiply(array)
{
var result=[];
var a=array;
for(i=0;i<a.length;i++){
    var temp=1;   
    for(j=0;j<a.length;j++){
	if(j==i){
	   temp*=1;
	}else{
	   temp*=array[j];
	}
      }
      result.push(temp);
    }
    return result;
}
思路(四)

将数组分为上三角与下三角两部分相乘

function multiply(array)
{
    // write code here
        if(!array||array.length<=0) return;
    var len=array.length;
    var b=[];
    b[0]=1;
    for(i=1;i<len;i++){
        b[i]=b[i-1]*array[i-1];
    }
    var temp=1;
    for(var i=len-2;i>=0;i--){
        temp*=array[i+1];
        b[i]*=temp;
    }
    return b;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值