当前位置: 面试刷题>> 余积 (经典算法题500道)
**题目补充描述**:
给定一个非负整数数组,要求编写一个函数来计算该数组的一个特定属性——“余积”。余积的定义是:对于数组中的每个元素,除了它自己以外的所有元素的乘积。例如,对于数组 `[1, 2, 3, 4]`,第一个元素的余积是 `2*3*4 = 24`,第二个元素的余积是 `1*3*4 = 12`,以此类推。
**要求**:
- 实现一个函数,该函数接受一个非负整数数组作为输入,并返回一个数组,其中包含每个元素的余积。
- 如果数组为空,则返回空数组。
- 如果数组中包含0,则考虑0对乘积的影响(即任何数与0相乘都为0)。
**PHP代码示例**:
```php
function calculateResidualProducts($nums) {
$n = count($nums);
if ($n == 0) return [];
$leftProduct = array_fill(0, $n, 1); // 左侧乘积数组,初始化为1
$rightProduct = array_fill(0, $n, 1); // 右侧乘积数组,初始化为1
// 计算每个元素的左侧乘积
for ($i = 1; $i < $n; $i++) {
$leftProduct[$i] = $leftProduct[$i - 1] * $nums[$i - 1];
}
// 从右向左计算每个元素的右侧乘积
for ($i = $n - 2; $i >= 0; $i--) {
$rightProduct[$i] = $rightProduct[$i + 1] * $nums[$i + 1];
}
// 计算余积
$result = [];
for ($i = 0; $i < $n; $i++) {
$result[] = $leftProduct[$i] * $rightProduct[$i];
}
return $result;
}
// 示例
$nums = [1, 2, 3, 4];
$result = calculateResidualProducts($nums);
print_r($result); // 输出 [24, 12, 8, 6]
```
**Python代码示例**:
```python
def calculateResidualProducts(nums):
if not nums:
return []
n = len(nums)
left_product = [1] * n # 左侧乘积数组
right_product = [1] * n # 右侧乘积数组
# 计算每个元素的左侧乘积
for i in range(1, n):
left_product[i] = left_product[i - 1] * nums[i - 1]
# 从右向左计算每个元素的右侧乘积
for i in range(n - 2, -1, -1):
right_product[i] = right_product[i + 1] * nums[i + 1]
# 计算余积
return [left * right for left, right in zip(left_product, right_product)]
# 示例
nums = [1, 2, 3, 4]
result = calculateResidualProducts(nums)
print(result) # 输出 [24, 12, 8, 6]
```
**JavaScript代码示例**:
```javascript
function calculateResidualProducts(nums) {
if (nums.length === 0) return [];
const n = nums.length;
const leftProduct = new Array(n).fill(1); // 左侧乘积数组
const rightProduct = new Array(n).fill(1); // 右侧乘积数组
// 计算每个元素的左侧乘积
for (let i = 1; i < n; i++) {
leftProduct[i] = leftProduct[i - 1] * nums[i - 1];
}
// 从右向左计算每个元素的右侧乘积
for (let i = n - 2; i >= 0; i--) {
rightProduct[i] = rightProduct[i + 1] * nums[i + 1];
}
// 计算余积
const result = [];
for (let i = 0; i < n; i++) {
result.push(leftProduct[i] * rightProduct[i]);
}
return result;
}
// 示例
const nums = [1, 2, 3, 4];
const result = calculateResidualProducts(nums);
console.log(result); // 输出 [24, 12, 8, 6]
```
**码小课**网站中有更多关于算法和数据结构的相关内容分享,欢迎大家学习交流!