Keshawn_lu's Blog

Leetcode 238. 除自身以外数组的乘积

字数统计: 305阅读时长: 1 min
2020/06/04 Share

题目简介:

给你一个长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。

示例:

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

提示:题目数据保证数组之中任意元素的全部前缀元素和后缀(甚至是整个数组)的乘积都在 32 位整数范围内。

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

思路:

将除自身以外的数组分为自身左边的数组和自身右边的数组两部分。

通过两次循环分别求出左边数组的乘积与右边数组的乘积。

tip:

  • 注意具体的手法…

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
class Solution {
public:
vector<int> productExceptSelf(vector<int>& nums) {

vector<int> res(nums.size());

int mul = 1;

for(int i = 0; i < nums.size(); i++){

res[i] = mul; //存储该数左边的乘积
mul = mul * nums[i];
}

mul = 1;
for(int i = nums.size() - 1; i >= 0; i--){

//将之前存储的值乘以该数右边数的乘积,便为最后结果
res[i] = res[i] * mul;
mul = mul * nums[i];
}

return res;
}
};
CATALOG
  1. 1. 题目简介:
  2. 2. 思路:
  3. 3. 代码如下: