当前位置: 面试刷题>> 余积 (经典算法题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] ``` **码小课**网站中有更多关于算法和数据结构的相关内容分享,欢迎大家学习交流!
推荐面试题