题目描述:
给定长度为 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 = 1for (var j = 0; j < i; j++ ) {m *= nums[j]}var n = 1for (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 = 1for(var i = 0; i < output.length; i++ ) {output[i] = kk = k * nums[i]}k = 1for(var i = output.length - 1; i >= 0; i-- ) {output[i] *= kk *= nums[i]}return output};
思考:
第一个是自己写的,没有满足空间复杂度的需求,而且时间复杂度也很高,第二个是借鉴了大佬的思路写的,极其精妙的解法。
总结:
更好的解法是建立在有足够题量经验的基础上才做出来的,还需要继续努力。
