郑州网站建设扌汉狮网络,做的网站每年都要收费吗,手机网站设计公司有哪些,icp备案是什么题目: 给定一个数组(长度大于1),如下
let a [1,4,3,4,5]
// 长度不确定,数值为整数要求写一个函数,返回该数组中,除本身数字之外其他元素的成积.即返回如下:
// 过程[4*3*4*5, 1*3*4*5, 1*4*4*5, 1*4*3*5, 1*4*3*4]
// 结果[240, 60, 80, 60, 48]题目要求不使用除法,且时间…题目: 给定一个数组(长度大于1),如下
let a [1,4,3,4,5]
// 长度不确定,数值为整数要求写一个函数,返回该数组中,除本身数字之外其他元素的成积.即返回如下:
// 过程[4*3*4*5, 1*3*4*5, 1*4*4*5, 1*4*3*5, 1*4*3*4]
// 结果[240, 60, 80, 60, 48]题目要求不使用除法,且时间复杂度为o(N) 思路如下:
/*假设返回的数组为 resres[0] arr[1] * arr[2] * arr[3] * arr[4] res[1] arr[0] * arr[2] * arr[3] * arr[4]res[2] arr[0] * arr[1] * arr[3] * arr[4]res[3] arr[0] * arr[1] * arr[2] * arr[4]res[4] arr[0] * arr[1] * arr[2] * arr[3]
*/ 可以看到,等式右边,可以按照数组的下标分为两部分 即可以看作:
/*res[0] a[0] * b[0]res[1] a[1] * b[1]res[2] a[2] * b[2]res[3] a[3] * b[3]res[4] a[4] * b[4]其中: a[0] 1a[1] arr[0]a[2] arr[1] * arr[0]a[3] arr[2] * arr[1] * arr[0]a[4] arr[3] * arr[2] * arr[1] * arr[0]进一步:a[0] 1a[1] arr[0] * a[0] arr[0]a[2] arr[1] * a[1] arr[1] * arr[0]...a[n] arr[n-1] * a[n-1]同理:b[n] 1b[n - 1] arr[n1] * b[n 1] */实现如下:
function getArr(arr){let len arr.length, a new Array(len).fill(1), b new Array(len).fill(1), res []for(let i 1; i len; i){a[i] arr[i - 1] * a[i -1]}for(let i len - 2; i -1; i--){b[i] arr[i1] * b[i1]}for(let i 0; ilen - 1; i){res[i] a[i] * b[i]}return res
}说明: 题目源自面试, 思路来自实验室大佬