ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

DeepSeek LeetCode 238. 除了自身以外数组的乘积 Java实现

DeepSeek    LeetCode 238. 除了自身以外数组的乘积 Java实现 LeetCode 238. 除了自身以外数组的乘积题目描述给你一个整数数组 nums返回数组 answer其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。题目保证数组 nums 中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。要求不要使用除法且在 O(n) 时间复杂度内完成。解题思路由于不能使用除法可以采用 左右乘积 的方式· answer[i] nums[0…i-1] 的乘积 × nums[i1…n-1] 的乘积· 先从左到右遍历计算每个位置左侧所有元素的乘积存入结果数组· 再从右到左遍历用一个变量 right 维护右侧所有元素的乘积乘到结果数组对应位置这样只需常数级额外空间输出数组不计入。Java 实现classSolution{publicint[]productExceptSelf(int[]nums){intnnums.length;int[]resnewint[n];// 1. 从左到右res[i] 表示 nums[i] 左侧所有元素的乘积res[0]1;for(inti1;in;i){res[i]res[i-1]*nums[i-1];}// 2. 从右到左用 right 维护右侧所有元素的乘积intright1;for(intin-1;i0;i--){res[i]*right;// 左侧乘积 × 右侧乘积right*nums[i];// 更新右侧乘积}returnres;}}执行示例输入nums [1, 2, 3, 4]步骤 结果数组 res初始化 [1, 0, 0, 0]从左到右计算左侧乘积 [1, 1, 2, 6]从右到左乘上右侧乘积 [24, 12, 8, 6]最终输出[24, 12, 8, 6]复杂度分析指标 复杂度时间复杂度 O(n)空间复杂度 O(1)不计算返回数组关键点不使用除法避免处理除数为 0 的特殊情况。两次遍历第一次存左侧乘积第二次乘上右侧乘积。空间优化直接复用返回数组存储左侧乘积再用一个变量维护右侧乘积无需额外数组。边界情况数组长度为 2 时同样适用结果数组每个位置都是另一个元素的值。
返回列表