题目描述:
给定长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积
**示例:
输入: [1,2,3,4]
输出: [24,12,8,6]
说明: 请不要使用除法,且在 O(n) 时间复杂度内完成此题。
进阶:
你可以在常数空间复杂度内完成这个题目吗?( 出于对空间复杂度分析的目的,输出数组不被视为额外空间。)
算法实现:
/**
* @param {number[]} nums
* @return {number[]}
*/
var productExceptSelf = function(nums) {
var output = new Array(nums.length)
output.fill(1)
for (var i = 0; i < output.length; i++ ) {
var m = 1
for (var j = 0; j < i; j++ ) {
m *= nums[j]
}
var n = 1
for (var k = i + 1; k < nums.length; k++ ) {
n *= nums[k]
}
output[i] = m * n
}
return output
};
/**
* @param {number[]} nums
* @return {number[]}
*/
var productExceptSelf = function(nums) {
var output = new Array(nums.length)
var k = 1
for(var i = 0; i < output.length; i++ ) {
output[i] = k
k = k * nums[i]
}
k = 1
for(var i = output.length - 1; i >= 0; i-- ) {
output[i] *= k
k *= nums[i]
}
return output
};
思考:
第一个是自己写的,没有满足空间复杂度的需求,而且时间复杂度也很高,第二个是借鉴了大佬的思路写的,极其精妙的解法。
总结:
更好的解法是建立在有足够题量经验的基础上才做出来的,还需要继续努力。