238. 除自身以外数组的乘积
题目
给你一个长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。
示例:
1 | 输入: [1,2,3,4] |
提示:题目数据保证数组之中任意元素的全部前缀元素和后缀(甚至是整个数组)的乘积都在 32 位整数范围内。
说明: 请不要使用除法,且在 O(n) 时间复杂度内完成此题。
进阶:
你可以在常数空间复杂度内完成这个题目吗?( 出于对空间复杂度分析的目的,输出数组不被视为额外空间。)
主要思路
首先应该想到的是使用两个数组,分别存放左乘结果和右乘结果,这样最后两个数组中相同位置的乘积即为除该处元素外的乘积。这是一种$O(n)$的解法
为了保证常数空间复杂度,就需要想办法对空间进行优化。由于输出数组不被视为额外空间,那么我们就可以将输出数组先作为单边乘积数组。
然后另一边乘积数组我们发现其实每次计算只和前一个元素有关系,所以我们使用一个变量来代表。但同时这也意味着我们最终计算时的方向已经确定了。
代码实现
1 | class Solution { |
原文链接: https://zijian.wang/2021/09/17/238. 除自身以外数组的乘积(数组)/
版权声明: 转载请注明出处.