阅读量:0
今天分享的题目是letcode238. 除自身以外数组的乘积
先来看题目描述:
本道题我最先想到的是先乘积所有的元素,然后除以所有元素,但是本题无法使用除法。
本题的解题思路是使用前缀积。
拿nums[]={1,2,3,4};
先遍历前缀积,num[0]的1的前缀积为1,num[1],2的前缀积也是1,num[2],3的前缀积为2…,前缀积的[1,1,2,6];
再计算它的后缀积=[1,4,12,24],将前缀积和后缀积进行相乘即可得到目标数组。
result=[16,24,121,241]=[24,12,8,6];
具体代码实现:
public int[] productExceptSelf(int[] nums) { int arr []=new int[nums.length]; int arr1 [] =new int[nums.length]; int pre = 1; //计算前缀积 for (int i = 0; i < nums.length; i++) { arr[i]=pre; pre=pre*nums[i]; } //计算后缀积 int last = 1; for (int i =nums.length-1;i>=0;i--){ arr1[i]=last; last=last*nums[i]; } //得到目标数组 for (int i = 0; i < nums.length; i++) { arr[i]=arr[i]*arr1[i]; } return arr;