力扣題目:238. 除自身以外數組的乘積 - 力扣(LeetCode)
題目描述:
給你一個整數數組?nums
,返回 數組?answer
?,其中?answer[i]
?等于?nums
?中除?nums[i]
?之外其余各元素的乘積?。
題目數據 保證 數組?nums
之中任意元素的全部前綴元素和后綴的乘積都在? 32 位 整數范圍內。
請?不要使用除法,且在?O(n)
時間復雜度內完成此題。
示例 1:
輸入: nums =[1,2,3,4]
輸出:[24,12,8,6]
示例 2:
輸入: nums = [-1,1,0,-3,3] 輸出: [0,0,9,0,0]
提示:
2 <= nums.length <= 10^5
-30 <= nums[i] <= 30
- 輸入?保證 數組?
answer[i]
?在? 32 位 整數范圍內
進階:你可以在 O(1)
?的額外空間復雜度內完成這個題目嗎?( 出于對空間復雜度分析的目的,輸出數組?不被視為?額外空間。)
算法如下:
//求除自身以外的其它數的乘積class Solution {public int[] productExceptSelf(int[] nums) {int L=nums.length;int[] left=new int[L];int[] right=new int[L];//左側left[0]=1;for(int i=1;i<L;i++){left[i]=nums[i-1]*left[i-1];}//右側right[L-1]=1;for(int i=L-2;i>=0;i--){right[i]=right[i+1]*nums[i+1];}//查索引返回int[] answer=new int[L];for(int i=0;i<L;i++){answer[i]=left[i]*right[i];}return answer;}
}