题目描述:
解题思路:
该题目可以直接进行暴力求解,每一次进行求解B数组中的每一项时,都把A数组中的n - 1个数据进行相乘,很显然此时的时间复杂度为O(n^2)。
function multiply(array) { // write code here if (array.length <= 1) { return 0; } let arrayB = []; for (let i = 0; i < array.length; i++) { let temp = 1; for (let j = 0; j < array.length; j++) { if (i == j) { continue }else { temp *= array[j]; } } arrayB.push(temp); } return arrayB; }
不难发现,这种暴力解法进行了大量的重复计算,为了避免重复计算降低时间复杂度,我们分别进行计算,将分为i之前和i之后两部分进行。用两个for循环便可以实现,可以看出,此时时间复杂度降为O(n)
代码实现:
JS
function multiply(array) { // write code here var arrayB = []; if (array.length <= 1) { return 0; } arrayB[0] = 1; //分为两部分进行计算 //第一部分计算i之前的 for (var i = 0; i < array.length; i++) { arrayB[i] = array[i - 1] * array[i - 1]; } var temp = 1; //第二部分计算i之前的 for (var j = array.length; j >= 0 ; j--) { var temp = array[j + 1] * temp; arrayB[j] = arrayB[j] * temp; } return arrayB; }