题目描述:

给定长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积
**示例:

  1. 输入: [1,2,3,4]
  2. 输出: [24,12,8,6]

说明: 请不要使用除法,且在 O(n) 时间复杂度内完成此题。

进阶:
你可以在常数空间复杂度内完成这个题目吗?( 出于对空间复杂度分析的目的,输出数组不被视为额外空间。)

算法实现:

  1. /**
  2. * @param {number[]} nums
  3. * @return {number[]}
  4. */
  5. var productExceptSelf = function(nums) {
  6. var output = new Array(nums.length)
  7. output.fill(1)
  8. for (var i = 0; i < output.length; i++ ) {
  9. var m = 1
  10. for (var j = 0; j < i; j++ ) {
  11. m *= nums[j]
  12. }
  13. var n = 1
  14. for (var k = i + 1; k < nums.length; k++ ) {
  15. n *= nums[k]
  16. }
  17. output[i] = m * n
  18. }
  19. return output
  20. };
  1. /**
  2. * @param {number[]} nums
  3. * @return {number[]}
  4. */
  5. var productExceptSelf = function(nums) {
  6. var output = new Array(nums.length)
  7. var k = 1
  8. for(var i = 0; i < output.length; i++ ) {
  9. output[i] = k
  10. k = k * nums[i]
  11. }
  12. k = 1
  13. for(var i = output.length - 1; i >= 0; i-- ) {
  14. output[i] *= k
  15. k *= nums[i]
  16. }
  17. return output
  18. };

思考:

第一个是自己写的,没有满足空间复杂度的需求,而且时间复杂度也很高,第二个是借鉴了大佬的思路写的,极其精妙的解法。

总结:

更好的解法是建立在有足够题量经验的基础上才做出来的,还需要继续努力。